用液体设置输入值的最安全方法是什么?

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 个字符,那会破坏您的用户输入。