首页 文章

JSON:为什么正斜线逃脱了?

提问于
浏览
325

这个“逃脱”我的原因 .

JSON转义正斜杠,因此散列 {a: "a/b/c"} 被序列化为 {"a":"a\/b\/c"} 而不是 {"a":"a/b/c"} .

为什么?

6 回答

  • -6

    由于JSON是按照定义javascript,并且在javascript中根据定义,单个反斜杠不能出现在字符串中而不是特殊编码符号(如换行符)的一部分,那么为正斜杠添加额外的特殊编码符号是完全合乎逻辑的因为这样可以简化防止XSS攻击的任务,所以你甚至可以感谢那个能够将这个(看似)有争议的黑客入侵JSON规范的人 . 他们也可以为尖括号添加相同的特殊符号,但似乎没有必要这样做,因为正斜杠中和它不再是敌对的,他们可以在代码中抛出尽可能多的尖括号 - 它只是赢了'允许任何疯狂的屁股XSS成功 .

  • 14

    JSON不需要't require you to do that, it allows you to do that. It also allows you to use 867150 for 867151 , but it' . 允许 \/ 有助于在 <script> 标记中嵌入JSON,这不允许在字符串内部使用 </ ,如Seb指出的那样 .

    一些Microsoft 's ASP.NET Ajax/JSON API'使用此漏洞添加额外信息,例如,日期时间将作为 "\/Date(milliseconds)\/" 发送 . (呸)

  • 28

    JSON规范说你可以逃脱正斜杠,但你不必这样做 .

  • 250

    我前段时间问过the same question并且不得不自己回答 . 这就是我想出的:

    看起来,我的第一个想法[它来自它的JavaScript根源]是正确的 . JavaScript中的'/ /'==='/',JSON是有效的JavaScript . 但是,为什么在JSON中不允许其他被忽略的转义(如\ z)?关键是阅读http://www.cs.tut.fi/~jkorpela/www/revsol.html,然后是http://www.w3.org/TR/html4/appendix/notes.html#hB .3.2 . 斜杠转义的功能允许将JSON嵌入HTML(作为SGML)和XML中 .

  • 3

    丑陋的PHP!

    JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES 必须是默认选项,而不是(奇怪)选项... How to say it to php-developers?

    默认必须是最常用的,并且(当前)最广泛使用的标准为UTF8 . Github或其他地方有多少PHP代码片段需要这个exoctic "embedded in HTML"功能?

  • 7

    PHP escapes forward slashes by default这可能是为什么这看起来如此普遍 . 我不知道为什么,但可能是因为在 <script> 标签内嵌入字符串 "</script>" 被认为是不安全的 .

    传入 JSON_UNESCAPED_SLASHES 标志可以禁用此功能,但大多数开发人员不会使用此功能,因为原始结果已经是有效的JSON .

相关问题