JavaScript JSON 转义安全

标签 javascript json escaping

有人可以向我解释一下为什么 JSON 中的字符串会执行吗? (第二个 <script> 标签及以后。)

http://codepen.io/anon/pen/PZLyve

<script>
    var data = {
      "UserId": "576757ef-1234-4aac-aad8-98f9088138f4",
      "Firstname": "Firstname<script>alert(\"User firstname security!\");</script>",
      "Lastname": "Lastname<script>alert(\"User lastname security!\");</script>",
      "Email": "<script>alert(\"User email security!\");</script>",
      "Username": "Username<script>alert(\"User username security!\");</script>"
    };
</script>

该代码是将数据从 MVC 转换为 JSON 的结果:

var data = @Html.Raw(JsonConvert.SerializeObject(Model.User));

最佳答案

因为浏览器的 HTML 解析器无法理解 Javascript。它看到的只是:

<script>
    blah blah blah </script>
    blah blah <script>blah blah</script>
    ...

它传递了这些<script>中每一个的内容单独标记到 Javascript 解释器。

如果您在 HTML 中嵌入 Javascript,则必须对其进行 HTML 转义,或者需要分解 <script>标签:

'</sc' + 'ript>'

关于JavaScript JSON 转义安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35428974/

相关文章:

javascript - 让 Select2 Gem 与 A​​ctiveAdmin "Add New"按钮一起使用

javascript - D3-使用 d3.mouse 定位工具提示不起作用

javascript - 了解 Backbone.js 事件处理程序

Node/Express 中的 JSON 模板

python - 获取 json 中所有嵌套键的列表

postgresql - 在 Postgresql 中转义反斜杠

javascript - 更改 JavaScript 对象键的大小写

php - 如何从 JSON 在 Eloquent ORM 中保存具有相关记录的模型

Java Regex - 按空格分割字符串 - 忽略引号和转义引号中的空格

templates - 下划线模板不渲染带有 <%- 的变量