我试图围绕如何真正保护公开可用的任何类型的ajax调用。
假设公共页面上的JavaScript(因此没有任何类型的用户身份验证)包含对PHP脚本(REST API或只是一个脚本,无关紧要)的AJAX调用,这会带来很多繁重的工作。因此,任何用户都可以查看源代码,找到AJAX调用,重建并执行它,并在一秒钟内再次执行一百万次,并以这种方式DDoS您的网站 - 不是那么好。起初我认为HTTP_REFERER检查可能有用,但是作为任何头字段,这也是可操作的(只使用卷曲请求),因此安全性的增益不会太高。
下一个方法是使用会话ID,cookie等组合为每个页面查看器构建某种访问密钥,当某人超出限制时,AJAX调用将遇到错误。到目前为止听起来很棒,但只需清理饼干等,一切都将被重置。所以也没有真正的解决方案但是当然!使用IP!很好的主意!公共网络中只使用一个IP进行互联网访问的用户将非常高兴,如果一个不法分子通过滥用呼叫阻止所有这些服务......不是。所以,也没有很好的解决方案。
所以,我真的被困在这里,不能为我的问题想出任何好的答案。
我还考虑过API密钥或类似的东西。但这是一个也可以从JavaScript源中提取的信息。那么如何防止其他服务器以代理方式使用您的服务为您的用户提供数据? (例如,您在自己的网站(或任何其他API)中实施了GMaps API,并且有人使用您的脚本通过密钥访问API)
TL;博士
有没有什么好方法可以真正保护您的公开可见的AJAX调用,防止他们滥用DDoSing您的网站,在其他网站上展示您的数据等。
答案 0 :(得分:1)
我认为你是在思考AJAX是什么。当您的站点在服务器端发出ajax请求时,它与任何其他页面请求相同(即使某些脚本的流程更加密集)。您需要保护整个站点,而不仅仅是特定的脚本。如果您的服务器没有任何DDoS保护,则可以通过任何页面进行攻击。查看CloudFare
等服务答案 1 :(得分:0)
正如@Sage所提到的,它与普通的http请求类似。您可以使用普通身份验证,因为每次进行ajax调用时,http头/ cookie信息都会传递到服务器。为了清晰视图,您可以在浏览器上查看开发人员控制台它与暴露您的网站根URL相同。只需确保您对ajax调用进行身份验证检查。