用液体设置输入值的最安全方法是什么?
what is the safest way to set an input value with liquid?
这是我正在做的事情:
<input value="{{ value | strip_html | escape }}">
查看示例似乎转义就足够了
https://github.com/Shopify/liquid/search?p=1&q=escape&unscoped_q=escape
但它不会转义例如 <
、>
和 "
。
(显然没有转义会导致 XSS)
我使用的是最新的 liquidjs
其他可能适合您需要的转义过滤器是:
handle
(或handleize
):将字符串格式化为句柄。
url_encode
:将字符串中的任何 URL 不安全字符转换为百分号编码字符。
url_escape
:识别字符串中所有在URLS中不允许出现的字符,并用它们的转义变体替换这些字符。
url_param_escape
:将字符串中所有不允许出现在 URL 中的字符替换为其转义变体,包括与号 (&)。
json
:将字符串转换为JSON格式。 (注意:简单的变量,比如字符串,变成用双引号包裹的转义字符串)
试一试,看看是否有任何符合您的要求。
来源:
https://help.shopify.com/en/themes/liquid/filters/string-filters
https://help.shopify.com/en/themes/liquid/filters/additional-filters
如果事情发生变化,我会更新这个答案,但似乎 | escape
就足够了,没有办法摆脱双引号属性 (""
) 而没有双引号, 我只需要确保我使用的是双引号。所以这应该足够了:
<input value="{{ value | escape }}">
需要明确的是 <input value="{{ value }}">
让您暴露于 XSS vulnerability。
你可以自己看看区别:https://jsfiddle.net/h80radfu/
Shopify 默认会转义大多数值。但是,许多 Liquid 库(如 Ruby Gem)不会并且将需要显式使用 | escape
过滤器。
所以在 Shopify 中,这就足够了
<input value="{{ value }}">
对于其他所有 Liquid 实现,请执行
<input value="{{ value | escape }}">
您不需要 strip_html
,因为如果用户需要在其文本中输入 HTML 个字符,那会破坏您的用户输入。
这是我正在做的事情:
<input value="{{ value | strip_html | escape }}">
查看示例似乎转义就足够了
https://github.com/Shopify/liquid/search?p=1&q=escape&unscoped_q=escape
但它不会转义例如 <
、>
和 "
。
(显然没有转义会导致 XSS)
我使用的是最新的 liquidjs
其他可能适合您需要的转义过滤器是:
handle
(或handleize
):将字符串格式化为句柄。url_encode
:将字符串中的任何 URL 不安全字符转换为百分号编码字符。url_escape
:识别字符串中所有在URLS中不允许出现的字符,并用它们的转义变体替换这些字符。url_param_escape
:将字符串中所有不允许出现在 URL 中的字符替换为其转义变体,包括与号 (&)。json
:将字符串转换为JSON格式。 (注意:简单的变量,比如字符串,变成用双引号包裹的转义字符串)
试一试,看看是否有任何符合您的要求。
来源: https://help.shopify.com/en/themes/liquid/filters/string-filters https://help.shopify.com/en/themes/liquid/filters/additional-filters
如果事情发生变化,我会更新这个答案,但似乎 | escape
就足够了,没有办法摆脱双引号属性 (""
) 而没有双引号, 我只需要确保我使用的是双引号。所以这应该足够了:
<input value="{{ value | escape }}">
需要明确的是 <input value="{{ value }}">
让您暴露于 XSS vulnerability。
你可以自己看看区别:https://jsfiddle.net/h80radfu/
Shopify 默认会转义大多数值。但是,许多 Liquid 库(如 Ruby Gem)不会并且将需要显式使用 | escape
过滤器。
所以在 Shopify 中,这就足够了
<input value="{{ value }}">
对于其他所有 Liquid 实现,请执行
<input value="{{ value | escape }}">
您不需要 strip_html
,因为如果用户需要在其文本中输入 HTML 个字符,那会破坏您的用户输入。