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

时间:2019-04-17 15:15:32

标签: javascript shopify xss liquid

这是我在做什么:

<input value="{{ value | strip_html | escape }}">

看看例子,似乎逃脱可能就足够了

https://github.com/Shopify/liquid/search?p=1&q=escape&unscoped_q=escape

但是它不会逃脱<>"

(显然没有转义会导致XSS)

我正在使用最新的Liquidjs

3 个答案:

答案 0 :(得分:1)

如果情况有所变化,但是| escape似乎足够了,并且没有办法排除双引号(""),我将更新此答案,我只需确保我使用双引号即可。这样就足够了:

<input value="{{ value | escape }}">

请注意,<input value="{{ value }}">使您接触到XSS vulnerability

您可以自己查看差异:https://jsfiddle.net/h80radfu/

答案 1 :(得分:0)

其他可能适合您的转义过滤器是:

  • `public function serialize() { return serialize([ $this->id, $this->username, $this->password ]); }` (或handle):将字符串格式化为句柄。
  • handleize:将字符串中所有不安全的URL字符转换为百分比编码的字符。
  • url_encode:标识URL中不允许使用的字符串中的所有字符,并将这些字符替换为其转义的变体。
  • url_escape:将URL中不允许的字符串中的所有字符替换为其转义的变体,包括“&”符号。
  • url_param_escape:将字符串转换为JSON格式。 (注意:简单的变量,例如字符串,会变成用双引号引起来的转义字符串)

旋转一下,看看它们是否满足您的要求。

来源: https://help.shopify.com/en/themes/liquid/filters/string-filters https://help.shopify.com/en/themes/liquid/filters/additional-filters

答案 2 :(得分:0)

默认情况下,Shopify将转义大多数值。但是,许多Liquid库(例如Ruby Gem)却没有,并且需要显式使用| escape过滤器。

所以在Shopify中,这就足够了

<input value="{{ value }}">

对于其他所有Liquid实施方式

<input value="{{ value | escape }}">

您不需要strip_html,因为如果用户需要在其文本中添加HTML字符,那将破坏您的用户输入。