Shopify如何使他们的液体模板安全(避免使用XSS)?

Ale*_*xey 9 xss ruby-on-rails liquid shopify

如果以不安全的方式使用Shopify,Shopify会自动转义值,但我没有在液体宝石中找到此功能.

例:

模板: <div data="{{ user_name }}">{{ user_name }}</div>

用户名: '" onclick="alert(\'XSS\')'

Shopify将其呈现为:

<div data="&quot; onclick=&quot;alert('XSS')&quot;">" onclick="alert('XSS')"</div>
Run Code Online (Sandbox Code Playgroud)

液体宝石呈现为:

<div data="" onclick="alert('XSS')">" onclick="alert('XSS')"</div>
Run Code Online (Sandbox Code Playgroud)

Ruby代码:

markup = '<div data="{{ user_name }}">{{ user_name }}</div>'
template = Liquid::Template.parse(markup)

template.render!('user_name' => '" onclick="alert(\'XSS\')')   
Run Code Online (Sandbox Code Playgroud)

Shopify如何做到这一点?

我知道escape液体中有过滤器,或者我可以在后端逃避值.但Shopify的解决方案看起来更安全:如果忘记对值进行编码并且代码看起来更清晰,则不会出现XSS漏洞:{{ value }}而不是{{ value | encode }}

谢谢

Isl*_*zab 1

我不确定它是如何“完全完成”的,但在 Shopify 渲染的输出中, user_name 似乎是 html 转义的。