security - 你喜欢在另一个JSON对象中包装JSON数组,还是总是需要POST来防止JSON劫持?

  显示原文与译文双语对照的内容
0 0

我最近开始使用. NET MVC构建web应用程序,我偶然发现了 Phil Haack的博客文章: JSON劫持 。对于那些不知道在使用JSON传输敏感数据时不知道这个漏洞的人,这是一个必须。

似乎有三种处理这里漏洞的方法。

  1. 在JSON服务中需要POST而不是 get 。
  2. 将JSON数组响应封装在JSON对象中。
  3. 不在任何未受 1或者 2保护的服务中公开敏感数据。

第三种选择实际上不是一个选项,因为它真正限制了JSON的使用。

那么另外两个你更喜欢?

默认情况下,.NET 2预览需要一篇关于JSON响应的文章,我认为这是保护任何不知道这个问题的开发人员的好方法。 但对我来说,用这种方式休息会感觉到一些"特技特技"。 除非有人把我 it,我将在另一个物体上包装我的阵列,并把它包裹在 client 。

时间:原作者:3个回答

0 0

我亲自将所有回复打包在注释中:

/* {
"foo": 3,
"bar":"string with *x2F sequence in"
} */

然后在 JSON.parsing 之前把它去掉。 这使得它成为脚本标记的一个目标。

值得注意的是,这个问题不仅与JSON有关,而且你所提供的任何HTTP响应都可以解释为 JavaScript 。 甚至,例如。htaccess-protected文本文件很容易通过third-party脚本标记包含泄露,如果它是一种有效的JavaScript格式的格式。

这里有一点麻烦:感谢 E4X,即使是普通的,静态的XML文档也是有效的JavaScript 。 E4X是一个灾难性且无用的扩展,它是在Mozilla上实现和发明的,它允许你编写 <element>content</element> XML文本在JS中嵌入;因此,受保护的XML文件现在很容易受到相同的cross-site-leakage风险。 感谢 Mozilla 。请参见文档中的doctype文档

原作者:
0 0

由于这基本上是CSRF攻击,你可以放置一个令牌( 比如 。 每个JSON调用中的会话id和秘密)的哈希值,并检查服务器上的令牌的有效性。 这是你应该做的正常的POST请求。

原作者:
0 0

这是典型的csrf ( 交叉站点请求伪造) 。

下面是一个解决方案:

http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

原作者:
...