2012-05-17 80 views
1

我有一个安全的网站,要求用户进行身份验证,并希望从我的API通过JSON-P返回敏感数据到客户端,以便我可以避开ajax跨域的问题。我拥有客户端和服务器,所以我不关心客户端的安全性(即从服务器读取恶意的js)。JSON-P与敏感信息的使用

我一直在研究如何保护JSON-P以防止跨站点请求伪造,但一直未能清楚地确定检查Referer是否是保护数据安全的方法。据我了解,在这种情况下Referer标题不能被欺骗,因为调用将来自javascript,并且标题不能更改。这是一个正确的假设吗?

我想知道为什么或为什么不检查Referer是否会无法保护JSON-P,这些清晰的例子。

谢谢!

编辑:

只是为了澄清 - 的JSON-P是通过Spring Security的安全,所以它不会只由Referer标头担保。我主要关心会话劫持...

+0

您应该查看OAuth,它基本上采用了使用签名令牌进一步检查引荐者的想法。 – user123444555621

+0

我考虑过OAuth,它可能会让我们使用JSON(而不是'with padding')。目前我们正在使用CAS,我想使用它,但到目前为止,它只是一个试图让它与AJAX调用一起工作以获得纯JSON的熊。 – acvcu

回答

1

Jsonp网址可以使用普通卷曲代码进行调用。 http引用很容易被伪造。

+0

是的,但是如果您从普通客户端调用JSON-P,那么您必须首先进行身份验证,因此我认为curl不会起作用。有人可以获取不应该访问的数据的唯一方法是劫持现有会话,然后欺骗引用者,我认为这将通过Javascript。 – acvcu

+0

@acvcu这是否意味着该网址在登录时包含某种会话信息? – user123444555621

+0

不,URL本身在登录时没有任何会话信息。它使用JSESSIONID cookie。 – acvcu

1

我想知道为什么或为什么不检查Referer会不会工作来保护JSON-P的一些明确的例子。

Referer不能保证被发送出去:

  • ,如果你需要它存在并匹配受信任的站点,你会被打破了大家的应用程序,其浏览器或网络设置没有按发送它;如果你允许它不存在以解决这个问题,你打开自己的攻击不仅仅是为了那些用户,而是针对每个攻击者可以诱使Referer不被发送的人(最明显的是,来自HTTPS页面;

  • 也与代理正常,你就必须no-cache所有的反应(或Vary: Referer,但不会正确的工作在IE)

介绍人检查是一个软弱和问题方法,有时候把它看作绝望的最后一个措施......这不是你应该做的当你有选择的时候。如果您控制两台服务器,则可以轻松地将请求令牌包含在一个页面上,并由脚本识别。