我正在维护旧版代码库,并在我们的视图erb中注意到以下代码:
ui30_select_tag(filter[:param_name], options_for_select(filter[:options], filter[:selected]), {
prompt: 'Select a filter...',
onchange: remote_function(
url: report_link_options[:url],
with: report_link_options[:with],
before: mask_expression
)
})
如果使用适当的查询字符串参数将URL发送到视图,则可能会受到XSS攻击,因此为了测试,我使用以下命令发送了URL:
http://localhost:3000/admin/report_benefit/update?plan_years=%2c236704494926'})%3balert(1)%2f%2f264lr9p7f
瞧,当我选择上面的select标签中定义的下拉列表时,我的浏览器将执行我添加到plan_years参数上的警报。 report_link_options [:with]等于plan_years=,236704494926'});alert(1)//264lr9p7f
由于remote_function只需接受一个:with
参数并创建javascript,因此您无法真正针对xss攻击或执行的任何恶意js清除字符串,因为它使用参数创建了ajax js。
如何防止任何恶意js通过remote_function中的:with
子句传递?任何帮助将不胜感激!