我有http://example.com/index.html
,它在HTML中使用JavaScript(XmlHttpRequest)来调用http://example.com/json/?a=...&b=...
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
)而只允许这样做?
答案 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混淆等默认技术来尝试安全性,但它不会阻止某些人的动机。