我有一个网站,它大量使用从jQuery的JSON调用到托管在同一个Web域中的Web服务。许多电话都是从公共页面发出的,不需要访问者登录。
似乎我可以使用Fiddler重播这些JSON调用,这是一个很大的问题,因为现在恶意用户只需打开我的网站即可捕获Fiddler跟踪,然后所有投注都关闭,谁知道他/她能做到。
是否有办法保护Web服务,因此只允许在服务器上使用网站页面生成的那些JSON调用?我在后端使用ASP.NET MVC。
谢谢。
谢谢大家为这个话题做出贡献。我有一个跟进问题:
SSL怎么样?如果我将所有服务放在一个受SSL保护的文件夹中,那么这将是一个全能的解决方案(以牺牲性能为代价)吗?感谢。
答案 0 :(得分:1)
答案是否定的。用户始终可以模拟浏览器发出的HTTP请求。所以必须以这样的方式编写你的后端代码,它应该能够处理所有异常和恶意企图。
对您的所有请求使用nonce。这可能很难实现,但这是我脑海中最重要的事情之一。
跟踪用户代理并取消所有来自非标准浏览器的请求。
检查推荐人并确保它来自预期的网页或至少来自同一个网域
包含跟踪会话/ Cookie变量以保留曲目
然而,所有这些事情都可以被规避,所以最好的办法是让你的后端系统更安全,以处理任何用户输入。
答案 1 :(得分:0)
我建议验证每个JSON服务请求。 Ex-传递access_token
必须针对用户访问来验证每个服务请求。他有权访问此服务/数据吗?
应该为访客用户做同样的事情。只有有限的服务/数据才会向访客用户公开。
从facebook API中获取灵感。
答案 2 :(得分:0)
有多种方法可以检查JSON调用的有效性,每种方法都可以提供多级安全性:
Referer
HTTP标头是否包含您网站的网址。这为您提供了基本的安全性,因此普通用户无法通过Fiddle访问您的呼叫,例如答案 3 :(得分:0)
关于后续问题:
SSL仅保护浏览器和服务器之间的连接,即没有人可以检查两者之间的通信。 (例如,一个中间人可能会改变呼叫内容。)它不会阻止攻击者进行自己的JSON呼叫。不同之处在于他的电话是加密的,除了你的服务器之外,其他任何人都无法检查。