我想在脚本标记内的HTML文档源中存储JSON的内容.
该JSON的内容确实取决于用户提交的输入,因此需要非常小心地为XSS清理该字符串.
我在这里读了两个概念.
1.将所有出现的</script标记<\/script替换</为<\/服务器端,或将所有标记替换为服务器端.
代码方面它看起来如下(使用Python和jinja2作为示例):
// view
data = {
'test': 'asdas</script><b>as\'da</b><b>as"da</b>',
}
context_dict = {
'data_json': json.dumps(data, ensure_ascii=False).replace('</script', r'<\/script'),
}
// template
<script>
var data_json = {{ data_json | safe }};
</script>
// js
access it simply as window.data_json object
Run Code Online (Sandbox Code Playgroud)
2.将数据编码为HTML实体编码的JSON字符串,unescape +在客户端解析它.Unescape来自这个答案:https://stackoverflow.com/a/34064434/518169
// view
context_dict = {
'data_json': json.dumps(data, ensure_ascii=False),
}
// template
<script>
var data_json = '{{ data_json }}'; // encoded into HTML entities, like < > …Run Code Online (Sandbox Code Playgroud) 我一直在使用苗条,突然发现它默认逃脱了一切.所以锚标签看起来像这样:
<a href="/users/lyann/followers">
<img class="user-image" src="http://adasdasdasd.cloudfront.net/users&# 47;2011/05/24/4asdasd/asdasd.jpg" />
Run Code Online (Sandbox Code Playgroud)
是否可以像这样转义href和src属性?还有其他影响吗?但是,所有浏览器似乎都没有问题.