我有 http://example.com/index.html
,它在 HTML 中使用 JavaScript (XmlHttpRequest) 在 http://example.com 调用 Web 服务/json/?a=...&b=...
Web 服务向 index.html
返回一个 JSON 信息数组,然后显示在 index.html
上。
因为任何人都可以查看 index.html
的源代码并查看我如何调用 JSON 网络服务 (http://example.com/json/
), 如何防止人们直接调用我的 JSON 网络服务?
由于 Web 服务本质上是对我的数据库的开放读取,我不希望人们滥用 Web 服务并开始直接从 Web 服务获取数据,启动 DoS 我的服务器,获取更多的信息,等等。
更新:
有没有办法限制对http://example.com/json/
的请求只来自同一服务器(IP)和http://example的URL请求.com/index.html
?
意思是,http://example.com/json/
无法检测到请求者是 ($_SERVER['REQUEST_URI'] == http://example.com/index.html
) 并且只允许这样做?
最佳答案
没有简单的方法来防止这种情况。如果您的服务不是很受欢迎,因此很可能成为拒绝服务攻击的目标,我也不会费心。
我想到的一件事是使用一次性 token (对 10 或 100 个请求有效)。
其他(天真的)方法是检查请求中是否存在 X-Requested-With header ,但当然这很容易被伪造。因此,我的建议是:除非问题是真实的,否则什么都不做。
还有一个想法:hash calc .这个想法是要求客户端对每个请求执行相当昂贵的计算,而在服务器端验证计算很便宜。对于单个请求,开销非常小,但是对于 1000 个请求,它可能会占用大量 CPU 时间。我不知道 hashcalc 是否已被用于防止 DoS'ing 网络服务。几年前,它被提议作为反垃圾邮件措施,但从未流行起来。
关于javascript - 如何限制对我的网络服务的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2578645/