javascript - 在 Rails 的 escape_javascript() 输出中防止 XSS

标签 javascript jquery ruby-on-rails xss

在我正在处理的应用程序中,客户端 View 是根据数据库中的某些记录生成的。我首先生成记录的 JSON,将其保存在我页面的一个变量中,然后使用 JS 构建界面。

问题是记录包含用户生成的字段,因此应用程序容易受到 XSS 攻击。如果您让 JSON 通过 escape_html(通过不对其调用 html_safe),它会搞砸引号。

获取代码。在我的模型中:

Class Foo
  # ...
  def describe_for_view
    [{:title => "hello", :content => "<script>I.Am.Evil()</script>"}]
  end
end

在我看来的某个地方:

<script>
  var describedForView = $.parseJSON("<%= escape_javascript(@foo.describe_for_view.to_json).html_safe %>");
</script>

然后在我的 javascript 中:

$("body").append("title: " + describedForView[0].title + ", content: " + describedForView[0].content);

我目前正在做的是通过调用 $.sanitize 来包装对用户生成字段的访问,定义如下:

$.sanitize = function(str) {
  return $("<div/>").text(str).html();
};

事情是这样运作的,但我认为它不干净。

有什么建议吗?

最佳答案

Rails 3 有一个内置的 SanitizeHelper采用白名单方法。我会在将用户数据保存到数据库之前调用它,或者在您的 escape_javascript 调用中调用它:

escape_javascript(sanitize(some_stuff.to_json))

关于javascript - 在 Rails 的 escape_javascript() 输出中防止 XSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8777497/

相关文章:

javascript - HTML/jQuery : How to properly call a function on an anchor tag (cross-browser)

javascript - 单击按钮时调用脚本

ruby-on-rails - 每个 Controller 的 Rails 布局

ruby-on-rails - html 或 json 的同一 Controller 操作中的不同代码

javascript - (reactjs) 如何设置 promise 或将当前状态设置到本地存储中

javascript - 在表格中获取第三个标签

javascript - 为什么这些元素不显示行内 block ?

javascript - 通过 POST 调用 Rails 函数

javascript - 如何使用 jQuery 单独引用动态生成的 Bootstrap 面板

javascript - 跨浏览器图像预览效果