繁体   English   中英

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

[英]How to restrict access to my web service?

我有http://example.com/index.html ,它在HTML中使用JavaScript(XmlHttpRequest)来调用http://example.com/json/?a=...&b=...的Web服务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/只来自同一个服务器(IP)和URL请求http://example.com/index.html

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

没有简单的方法可以防止这种情况发生 如果您的服务不是非常受欢迎,因此可能成为拒绝服务攻击的目标,我不会打扰。

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

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

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

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

答案很简单,使用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']

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM