保护Rails中escape_javascript()输出中的XSS
在我正在处理的应用程序中,根据数据库中的一些记录生成客户端视图。我首先生成记录的JSON,将其保存在页面中的一个变量中,然后使用JS构建接口 问题在于记录包含用户生成的字段,因此应用程序容易受到XSS的影响。如果让JSON通过保护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 =>
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();
};