保护JSON服务

时间:2013-03-13 12:31:09

标签: jquery asp.net-mvc json security

我有一个网站,它大量使用从jQuery的JSON调用到托管在同一个Web域中的Web服务。许多电话都是从公共页面发出的,不需要访问者登录。

似乎我可以使用Fiddler重播这些JSON调用,这是一个很大的问题,因为现在恶意用户只需打开我的网站即可捕获Fiddler跟踪,然后所有投注都关闭,谁知道他/她能做到。

是否有办法保护Web服务,因此只允许在服务器上使用网站页面生成的那些JSON调用?我在后端使用ASP.NET MVC。

谢谢。


谢谢大家为这个话题做出贡献。我有一个跟进问题:

SSL怎么样?如果我将所有服务放在一个受SSL保护的文件夹中,那么这将是一个全能的解决方案(以牺牲性能为代价)吗?感谢。

4 个答案:

答案 0 :(得分:1)

答案是否定的。用户始终可以模拟浏览器发出的HTTP请求。所以必须以这样的方式编写你的后端代码,它应该能够处理所有异常和恶意企图。

  1. 对您的所有请求使用nonce。这可能很难实现,但这是我脑海中最重要的事情之一。

  2. 跟踪用户代理并取消所有来自非标准浏览器的请求。

  3. 检查推荐人并确保它来自预期的网页或至少来自同一个网域

  4. 包含跟踪会话/ Cookie变量以保留曲目

  5. 然而,所有这些事情都可以被规避,所以最好的办法是让你的后端系统更安全,以处理任何用户输入。

答案 1 :(得分:0)

我建议验证每个JSON服务请求。 Ex-传递access_token

必须针对用户访问来验证每个服务请求。他有权访问此服务/数据吗?

应该为访客用户做同样的事情。只有有限的服务/数据才会向访客用户公开。

从facebook API中获取灵感。

答案 2 :(得分:0)

有多种方法可以检查JSON调用的有效性,每种方法都可以提供多级安全性:

  • 检查Referer HTTP标头是否包含您网站的网址。这为您提供了基本的安全性,因此普通用户无法通过Fiddle访问您的呼叫,例如
  • 如果JSON的内容是在服务器端生成的,那么您可以对json内容进行签名,以便只接受您之前在服务器端生成的那些调用。例如,查看JSON Web Token(JWT)。
  • 如果未在服务器端生成JSON内容,您仍然可以发出一次必须在每个JSON调用中出现的“票证”。您必须在服务器端检查故障单的有效性,并且该故障单仅使用一次。

答案 3 :(得分:0)

关于后续问题:

SSL仅保护浏览器和服务器之间的连接,即没有人可以检查两者之间的通信。 (例如,一个中间人可能会改变呼叫内容。)它不会阻止攻击者进行自己的JSON呼叫。不同之处在于他的电话是加密的,除了你的服务器之外,其他任何人都无法检查。