如何限制对我的Web服务的访问?

时间:2010-04-05 13:41:02

标签: javascript web-services security

我有http://example.com/index.html,它在HTML中使用JavaScript(XmlHttpRequest)来调用http://example.com/json/?a=...&b=...

上的Web服务

Web服务返回index.html一个JSON信息数组,然后显示在index.html上。

由于任何人都可以查看index.html的源代码并查看我如何调用JSON Web服务(http://example.com/json/),如何阻止人们直接调用我的JSON Web服务吗

由于Web服务本质上是一个开放的读取进入我的数据库,我不希望人们滥用Web服务并开始直接从Web服务获取数据,启动DoS我的服务器,获取比他们应该提供的更多信息等。

更新

是否无法限制http://example.com/json/的请求仅来自http://example.com/index.html的同一服务器(IP)和网址请求?

意思是,http://example.com/json/无法检测到请求者是($_SERVER['REQUEST_URI'] == http://example.com/index.html)而只允许这样做?

5 个答案:

答案 0 :(得分:4)

没有简单的方法来阻止。如果您的服务不是非常受欢迎,因此可能成为拒绝服务攻击的目标,我不会打扰。

我想到的一件事是使用一次性令牌(有效10或100个请求)。

其他(天真)方法是检查请求中是否存在X-Requested-With标头,但当然可以轻易伪造。所以,我的建议是:什么也不做,除非问题是真的

还有一个想法:hash calc。这个想法是要求客户端对每个请求执行相当昂贵的计算,而验证服务器端的计算是便宜的。对于单个请求,开销非常小,但是对于1000个请求,可能需要大量的CPU时间。我不知道hashcalc是否已用于阻止DoS的Web服务。几年前,它被提议作为反垃圾邮件措施,但从未流行过。

答案 1 :(得分:1)

答案很简单,使用CSRF保护。 http://en.wikipedia.org/wiki/Cross-site_request_forgery

简单地说,当用户访问您的站点(index.php)时,请输入会话: CSRF =(RANDOM_HASH)

询问JSON请求,example.com/json.php?hash=$_SESSION['CSRF']

在json.php中检查$_GET['hash']是否与$_SESSION['CSRF']匹配

这很简单...... 这是服务器端解决方案!

答案 2 :(得分:1)

我会跟踪发出请求的IP地址。如果您看到来自同一IP的大量请求,您可以阻止它或提供CAPTCHA。

答案 3 :(得分:0)

您可以采取一系列措施来增加服务的安全性。请检查此out

答案 4 :(得分:0)

您无法正确保护可从客户端javascript调用的Web服务。

你可以通过javascript混淆等默认技术来尝试安全性,但它不会阻止某些人的动机。