保护Rails中escape_javascript()输出中的XSS

保护Rails中escape_javascript()输出中的XSS,javascript,jquery,ruby-on-rails,xss,Javascript,Jquery,Ruby On Rails,Xss,在我正在处理的应用程序中,根据数据库中的一些记录生成客户端视图。我首先生成记录的JSON,将其保存在页面中的一个变量中,然后使用JS构建接口 问题在于记录包含用户生成的字段,因此应用程序容易受到XSS的影响。如果让JSON通过escape\u html(不在其上调用html\u safe),它会弄乱引号 去查密码。在我的模型中: Class Foo # ... def describe_for_view [{:title => "hello", :content =>

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

问题在于记录包含用户生成的字段,因此应用程序容易受到XSS的影响。如果让JSON通过
escape\u html
(不在其上调用
html\u safe
),它会弄乱引号

去查密码。在我的模型中:

Class Foo
  # ...
  def describe_for_view
    [{:title => "hello", :content => "<script>I.Am.Evil()</script>"}]
  end
end
我目前正在做的是,通过调用
$来包装对用户生成字段的访问。按照以下定义进行清理

$.sanitize = function(str) {
  return $("<div/>").text(str).html();
};
$.sanitize=函数(str){
返回$(“”).text(str).html();
};
事情是这样的,但我不认为它是干净的

有什么建议吗?

Rails 3内置了一个白名单方法。在将其持久化到数据库之前,我会在用户数据上调用它,或者在您的escape\u javascript调用中:

escape\u javascript(清理(一些东西到json))

$("body").append("title: " + describedForView[0].title + ", content: " + describedForView[0].content);
$.sanitize = function(str) {
  return $("<div/>").text(str).html();
};