编辑:为了将来参考,我使用非xhtml内容类型定义
我正在使用Django创建一个网站,我正在尝试在我的页面中嵌入任意json数据以供客户端javascript代码使用.
让我们说我的json对象是{"foo": ""}
.如果我直接嵌入,
"};
第一个关闭json对象.(另外,它会使站点容易受到XSS的攻击,因为这个json对象将被动态生成).
如果我使用django的HTML转义函数,结果输出是:
并且浏览器无法解释标记.
我在这里的问题是,
在这种情况下,我认为哪些角色可以逃脱?
是否有自动方式在Python/Django中执行此操作?
yonran.. 11
如果使用的是XHTML,你将能够使用实体引用(<
,>
,&
),以逃避你想要的任何字符串.您不希望使用某个
部分,因为序列"
]]>
"不能在CDATA部分中表达,您必须更改要表达的脚本]]>
.
但你可能没有使用XHTML.如果你使用的是常规HTML,那么标签的行为有点像XML中的CDATA部分,除了它有更多的陷阱.它结束于
.还有一些神秘的规则允许
(注释和
开始标记必须同时存在
才能通过).对于未来的浏览器所采用的HTML5编辑器中描述的妥协HTML 5标记化和CDATA逃逸
我认为外卖是,你必须避免在您的JSON发生,并且是安全的,你也应该避免
,
防止失控意见或脚本标记.我认为这是最简单的办法,以取代
<
与\u003c
和-->
与--\>
如果使用的是XHTML,你将能够使用实体引用(<
,>
,&
),以逃避你想要的任何字符串.您不希望使用某个
部分,因为序列"
]]>
"不能在CDATA部分中表达,您必须更改要表达的脚本]]>
.
但你可能没有使用XHTML.如果你使用的是常规HTML,那么标签的行为有点像XML中的CDATA部分,除了它有更多的陷阱.它结束于
.还有一些神秘的规则允许
(注释和
开始标记必须同时存在
才能通过).对于未来的浏览器所采用的HTML5编辑器中描述的妥协HTML 5标记化和CDATA逃逸
我认为外卖是,你必须避免在您的JSON发生,并且是安全的,你也应该避免
,
防止失控意见或脚本标记.我认为这是最简单的办法,以取代
<
与\u003c
和-->
与--\>
我尝试反斜杠逃避正斜杠,这似乎工作:
你试过吗?
另外,我很惊讶字符串中的嵌入式标记会破坏javascript.一开始无法相信它,但在Chrome和Firefox中测试过.