【发布时间】:2017-09-29 11:28:46
【问题描述】:
如果以不安全的方式使用值,Shopify 会自动转义值,但我在 liquid gem 中没有找到此功能。
例子:
模板: <div data="{{ user_name }}">{{ user_name }}</div>
用户名: '" onclick="alert(\'XSS\')'
Shopify 将其呈现为:
<div data="" onclick="alert('XSS')"">" onclick="alert('XSS')"</div>
Liquid gem 将其呈现为:
<div data="" onclick="alert('XSS')">" onclick="alert('XSS')"</div>
Ruby 代码:
markup = '<div data="{{ user_name }}">{{ user_name }}</div>'
template = Liquid::Template.parse(markup)
template.render!('user_name' => '" onclick="alert(\'XSS\')')
Shopify 是如何做到的?
我知道液体中有escape 过滤器,或者我可以在后端转义值。但是 Shopify 的解决方案看起来更安全:如果忘记对值进行编码,您不会遇到 XSS 漏洞并且代码看起来更干净:{{ value }} 而不是 {{ value | encode }}
谢谢
【问题讨论】:
标签: ruby-on-rails xss shopify liquid