JavaScriptJSON越狱安全
JavaScript JSON escape security
有人可以向我解释为什么 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>'
有人可以向我解释为什么 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>'