Xss HTML和Javascript的金字塔变色龙模板安全性

Xss HTML和Javascript的金字塔变色龙模板安全性,xss,pyramid,chameleon,zpt,Xss,Pyramid,Chameleon,Zpt,变色龙模板是否为变量转义/去除XSS和HTML标记?下列物品安全吗 <script type="text/javascript"> var initialComments = ${comments}; for (var i = 0; i < initialComments.length; i++) { initialComments[i].userId = initialComments[i].user_id; } var po

变色龙模板是否为变量转义/去除XSS和HTML标记?下列物品安全吗

<script type="text/javascript">

    var initialComments = ${comments};
    for (var i = 0; i < initialComments.length; i++) {
        initialComments[i].userId = initialComments[i].user_id;
    }
    var post = ${post}
    // ...

</script>

var initialComments=${comments};
对于(var i=0;i
来自:

默认情况下,字符串在插入前转义。要避免这种情况,请使用
结构
:前缀

然而,这并不能逃避JavaScript值。使用JSON;在您看来,请使用:

post_json = (json.dumps(post)
    .replace(u'<', u'\\u003c')
    .replace(u'>', u'\\u003e')
    .replace(u'&', u'\\u0026')
    .replace(u"'", u'\\u0027'))
1JSON允许,但默认情况下,
json.dumps()
函数会转义所有非ASCII码点。

来自:

默认情况下,字符串在插入前转义。要避免这种情况,请使用
结构
:前缀

然而,这并不能逃避JavaScript值。使用JSON;在您看来,请使用:

post_json = (json.dumps(post)
    .replace(u'<', u'\\u003c')
    .replace(u'>', u'\\u003e')
    .replace(u'&', u'\\u0026')
    .replace(u"'", u'\\u0027'))

1JSON允许,但默认情况下,
json.dumps()
函数会转义所有非ASCII码点。

这实际上比看起来更难,而且取决于具体情况。如果输出格式是HTML,那么脚本内容是一个特殊的CDATA部分,其中XML/SGML转义不会被解释。如果输出格式为XML,且为XML内容类型,则转义将按预期工作。即使可以对变色龙进行修补,使其能够理解
元素的特殊性,但目前还没有


根据浏览器版本的不同,当一个单一的
时,这实际上比看起来更难,并且取决于具体情况。如果输出格式是HTML,那么脚本内容是一个特殊的CDATA部分,其中XML/SGML转义不会被解释。如果输出格式为XML,且为XML内容类型,则转义将按预期工作。即使可以对变色龙进行修补,使其能够理解
元素的特殊性,但目前还没有


根据浏览器版本的不同,当使用单一的
时,这实际上是错误的。JSON不是Javascript子集,给定的代码不正确。与其断言代码不正确,不如告诉我它是如何不正确的
json.dumps()
生成作为子集的json。只需尝试在其中写入一个字符串,其中包含
alert('powned')
。这实际上是错误的。JSON不是Javascript子集,给定的代码不正确。与其断言代码不正确,不如告诉我它是如何不正确的
json.dumps()
生成作为子集的json。只需尝试在其中写入一个字符串,其中包含
alert('powned')
。如果使用
请确保ascii=False
。不要使用
然后确保使用ascii
。有一个原因是你不打开并坚持默认值。如果你不使用Sure_ascii=False,你会得到非常大和不可读的源代码,比如东亚脚本。这是大多数JS插值任务的一个常见问题?对我们来说是,这就是为什么我们关闭了它,并且不得不考虑这个额外的“功能”也是。如果使用
请确保ascii=False
。不要使用
然后确保使用ascii
。有一个原因是你不打开并坚持默认值。如果你不使用Sure_ascii=False,你会得到非常大和不可读的源代码,比如东亚脚本。这是大多数JS插值任务的一个常见问题?对我们来说是,这就是为什么我们关闭了它,并且不得不考虑这个额外的“功能”也是。你在这里寻找什么额外的细节?你在这里寻找什么额外的细节?
post_json = (json.dumps(foo, ensure_ascii=False)
    .replace('\u2028', r'\u2028')
    .replace('\u2029', r'\u2029')
    .replace('<', r'\u003c'))
post_json = json.dumps(foo, ensure_ascii=True)\
    .replace('<', r'\u003c')
${structure: post_json}