Rails中escape_javascript()输出中的XSS保护
Protecting from XSS in escape_javascript() output in Rails
在我正在开发的应用程序中,会根据数据库中的一些记录生成客户端视图。我首先生成记录的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中输出转义字符
- 如何在jQuery中将函数的输出分配给变量
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- Javascript,输出结果后页面不断刷新
- Datetime格式为Friendly Time.Moment JS输出错误
- 如何将angularjs中的javascript字符串输出为循环数组
- HTML5FileReader输出到D3.js图表
- console.log以外的Javascript输出函数
- Eloquent JavaScript递归示例如何终止为返回1,但仍然输出指数值
- PHP中的数组输出
- 以不同的顺序输出数据
- 使用Rivets.js输出类
- 在Chrome扩展内部输出Google API调用
- 如何为d3.js图表输出组织/嵌套数据
- 将IndexedDB中的数据拉入数组,并通过ReactJS输出
- 一个ajax循环有两个输出错误innerHTML
- 快速排序程序未正确输出
- 如何使用Passport保护路由终结点
- 如何保护节点webkit应用程序上的字体
- Rails中escape_javascript()输出中的XSS保护