我想在脚本标记内的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) 我怎么知道元素属性值的最大长度是多少?
例如
<div id="value1..."></div>
Run Code Online (Sandbox Code Playgroud)
此div的ID属性的最大允许长度是多少,以及任何元素的任何其他属性?