Javascript 用液体设置输入值最安全的方法是什么?
以下是我正在做的:Javascript 用液体设置输入值最安全的方法是什么?,javascript,shopify,xss,liquid,Javascript,Shopify,Xss,Liquid,以下是我正在做的: <input value="{{ value | strip_html | escape }}"> 看看这些例子,逃跑似乎就足够了 <input value="{{ value }}"> 但是它并没有逃逸,比如“ (显然没有逃逸导致XSS) 我正在使用最新的liquidjs其他符合您需要的转义过滤器包括: handle(或handleize):将字符串格式化为句柄 url\u encode:将字符串中的任何url不安全字符转换为百分比编码字
<input value="{{ value | strip_html | escape }}">
看看这些例子,逃跑似乎就足够了
<input value="{{ value }}">
但是它并没有逃逸
,比如“
(显然没有逃逸导致XSS)
我正在使用最新的liquidjs其他符合您需要的转义过滤器包括:
(或handle
):将字符串格式化为句柄handleize
:将字符串中的任何url不安全字符转换为百分比编码字符url\u encode
:标识url中不允许的字符串中的所有字符,并用其转义变体替换这些字符url\u escape
:将url中不允许的字符串中的所有字符替换为其转义变体,包括符号(&)url_param_escape
:将字符串转换为json格式。(注意:简单变量,如字符串,将变成用双引号括起来的转义字符串)json
其他适合您需要的转义过滤器包括:
(或handle
):将字符串格式化为句柄handleize
:将字符串中的任何url不安全字符转换为百分比编码字符url\u encode
:标识url中不允许的字符串中的所有字符,并用其转义变体替换这些字符url\u escape
:将url中不允许的字符串中的所有字符替换为其转义变体,包括符号(&)url_param_escape
:将字符串转换为json格式。(注意:简单变量,如字符串,将变成用双引号括起来的转义字符串)json
如果情况发生变化,我会更新这个答案,但似乎
| escape
已经足够了,而且没有双引号就无法摆脱双引号属性(“
),我只需要确保我使用了双引号。所以这应该足够了:
<input value="{{ value | escape }}">
要清楚的是,
会让你暴露在一个危险的环境中
你可以自己看到不同之处:如果情况发生变化,我会更新这个答案,但似乎
| escape
就足够了,没有双引号就无法摆脱双引号属性(“”
),我只需要确保我使用了双引号。所以这应该足够了:
<input value="{{ value | escape }}">
要清楚的是,
会让你暴露在一个危险的环境中
您可以自己看到不同之处:Shopify默认情况下会逃逸大多数值。但是,许多液体库(如Ruby Gem)不会,并且需要显式使用
|escape
过滤器
所以在Shopify中,这就足够了
<input value="{{ value }}">
对于每一个其他的液体实现,请执行以下操作
<input value="{{ value | escape }}">
您不需要
strip_html
,因为如果用户需要在文本中添加html字符,这将损坏您的用户输入。Shopify默认情况下将转义大多数值。但是,许多液体库(如Ruby Gem)不需要,并且需要显式使用转义
过滤器
所以在Shopify中,这就足够了
<input value="{{ value }}">
对于每一个其他的液体实现,请执行以下操作
<input value="{{ value | escape }}">
您不需要
strip_html
,因为如果用户需要在文本中输入html字符,这将损坏您的用户输入。该值是以前提供的自由格式用户输入,handle/url encode/escape/etc./json将更改结果值。我只想转义该值,这样就不会出现XSS。不会出现XSS原始表单输入。它被视为原始文本,不会被浏览器中的HTML解析器解释。当您在HTML元素中显示用户输入时,您只需要转义用户输入。然后,如果您只关心双引号(“
),只需使用{value | replace:''',''}
,否?另外,再次检查escape
是否没有发挥作用-现在我想起来了,我看到有相当多的网站使用了类似data something=“{{complex|u thing | escape}}”
的结构,引号确实得到了正确的转义。浏览器的开发工具可能会显示解析的值,即使底层HTML实际上是转义的。该值是以前提供的自由格式用户输入,handle/url encode/escape/etc./json会更改结果值。我只想转义这个值,这样就没有XSS了。在原始表单输入上就没有XSS了。它被视为原始文本,不被浏览器中的HTML解析器解释。当您在HTML元素中显示用户输入时,只需转义用户输入。然后,如果您只关心双引号(“
),只需使用{{value | replace:''','''}}
,没有?另外,仔细检查一下escape
是否没有发挥作用-现在我想起来了,我看到有相当多的网站使用了类似data something=“{{complex|u thing | escape}”的结构“
,引号确实会正确转义。浏览器的开发工具可能会显示解析的值,即使底层HTML实际上已转义