ruby-on-rails 如何防止XSS与Rails的actionview帮助?

gz5pxeao  于 5个月前  发布在  Ruby
关注(0)|答案(1)|浏览(67)

我试图从可能的xss攻击净化我的意见。
假设我有一个District对象,它有一个字段“name”。我创建了一个新的District,并将“name”的值设置为'New York"><img src=x onerror=alert(12)>'。现在我有一个这样的select_tag:
<%= select_tag "event[city]", options_for_select(District.all.pluck(:name), @event.city), { class: "form-control", data: {:action=>"change->events#update"}, include_blank: I18n.t("form.select") } %>
如何在呈现页面时阻止脚本运行?
我试过用白色列出“select”和“option”,用白色列出属性“data-action”、“id”、“name”和“class”,但仍然弹出警报。它似乎没有在“option”值内进行消毒。

txu3uszq

txu3uszq1#

ActionView::Helpers::SanitizeHelper.sanitize似乎删除了'New York"><img src=x onerror=alert(12)>'中的JavaScript代码。

3.2.2 :001 > include ActionView::Helpers::SanitizeHelper
3.2.2 :002 > sanitize('New York"><img src=x onerror=alert(12)>')
 => "New York\"&gt;<img src=\"x\">"

字符串
所以如果你正确使用sanitize的话,alert(12)不应该被调用。下面的代码从District.all.pluck(:name)返回的数组中清理每个name怎么样?

<%= select_tag 
  "event[city]", 
  options_for_select(District.all.pluck(:name).map { |name| sanitize(name) }, @event.city), 
  { 
    class: "form-control", 
    data: {:action=>"change->events#update"}, 
    include_blank: I18n.t("form.select") 
  } 
%>

相关问题