【发布时间】:2019-10-24 07:40:51
【问题描述】:
在保存到数据库之前,我在模型级别有一个字段为 xss_sanatised。当我希望显示它时,我应该再次escape_javascript 在视图中渲染它之前吗?
我的查询应该是这样的
User.all.pluck(:id, :name).map { id: id, name: escape_javascipt(name)}
而不是
User.all.pluck(:id, :name).map { id: id, name: name }
当我直接在数据库中注入<script>alert('hi')</script> 时,它实际上是在 UI 中执行的。
虽然如果不直接编写 SQL 查询,我就无法将该值写入数据库。
那么我应该对所有字段都使用escape_javascript 吗?
编辑
这在 UI 中使用 select2 呈现为下拉列表
<div input="hidden" id="input"></div>
jQuery('#input').select2({
multiple: false,
data: <%=tech.to_json.html_safe%>,
initSelection : function (element, callback) {
callback(<%= esc.to_json.html_safe %>);
}
});
【问题讨论】:
-
如何显示?
-
“要逐字插入内容,请使用
raw帮助程序,而不是调用html_safe,或者等效地使用<%==。” - Active Record Core Extensions
标签: ruby-on-rails ruby security ruby-on-rails-4 xss