在保护我的网络应用程序时,我认为自己是新手。 我建立了一个网站,通过AJAX调用定期更新网页。 Ajax调用返回一个容易在客户端使用的JSON对象。
我需要克服一个简单的问题:如何在未经许可的情况下阻止其他人使用相同的AJAX调用?如果他们建立了一个网站,并且在客户端,他们允许他们的用户对我的服务器进行相同的AJAX调用并抓住他们需要的东西......然后根据自己的需要解析在客户端?
我不能像用户身份验证那样增加额外的安全层。
答案 0 :(得分:3)
您可以检查HTTP_REFERER http标头,看看请求是否来自您的网页。然而,这可能是欺骗性的,因此不要将其视为防弹解决方案。最好的反击是真正的用户身份验证。
答案 1 :(得分:3)
他们无法直接从客户端执行此操作,因为浏览器将阻止除JSONP(脚本)之外的任何其他跨域AJAX请求。也就是说,如果他们愿意,他们可以在他们的服务器上代理它,因此它不会给你带来太大的收获。
ASP.NET MVC有一个antiforgery token mechanism,你应该寻找灵感。基本思想是您使用加密的cookie和加密的隐藏表单输入,其中包含您要写入每个要保护的页面的相同数据。使用POST进行AJAX调用,并确保发回表单输入。在服务器端解密cookie并输入并比较数据以确保它们是相同的。由于cookie与您的域绑定,因此注入要回发的请求将更加困难。使用SSL并定期重新生成cookie /输入内容,使伪造cookie /输入更加困难。
答案 2 :(得分:2)
您不能。这是因为您无法区分来自您的网络应用的AJAX通话和其他用户的网络应用。
以下是一些可能有助于一点的事情。
隐藏/加密您的AJAX响应。这会失败主要是因为您还必须在您的应用中包含解密代码。
检查IP来源。如果IP之前没有访问过您的服务器,您可以认为AJAX调用不是来自您的网站。如果a)用户在您的站点上切换IP /超时或b)如果另一个网站在使用您的AJAX API之前首先发送虚假的http请求,则不起作用。
另一个想法是发送Javascript而不是JSON对象。 Javascript应该包含更新您的网站所需的所有逻辑,当然可以检查该网站是否是您自己的。 (window.location的)。但这有一些缺点:为您做更多的工作,更高的流量负载,无论如何都可以打破它。
我认为这实际上并不是件坏事。另一个网站可以轻松地从您的网站上删除信息。
答案 3 :(得分:1)
如果通过“窃取”来表示从您的网站获取某些内容(使用HTTP GET),这与热链接的问题大致相同。您可以使用HTTP Referer
标头获得一些基本的保护技术(它可以解决,但在大多数情况下都适用)。
您遇到的另一个问题(确保请求来自您的应用程序)与 CSRF (跨站点请求伪造)有关。存在各种针对此的保护机制,例如主要基于以形式嵌入令牌。
您可以将这两种方法结合起来,尽管获取内容的真正保护措施来自用户身份验证(否则,其他网站也可能会获取您提供这些令牌的页面并代理它。)
(此外,依赖于记住IP地址的技术在整个Web架构中可能无法正常工作:如果您获得代理服务器池或客户端是可能更改IP的移动设备,则可能会导致问题各种请求之间的地址,这是完全合法的。)