如何防止跨域的ajax请求?

Suj*_*wal 5 php security cross-domain

如何检测是否从另一个域调用了我的PHP脚本,并且另一个域正在非法使用我的脚本?有没有办法防止这种情况?

更新

我在SO上发现了这个问题,但它仍然不安全,可以被欺骗。

Chr*_*ker 4

没有任何绝对万无一失的方法可以防止这种情况,因为任何标头信息都可以被欺骗。基于会话的令牌是另一种可能的解决方案,但在这种情况下,您的 JavaScript 是可公开访问的,因此任何愿意花一点时间的人都可以确定您的令牌系统如何工作并找出解决方法。

多种方法的结合将为您提供最广泛的保护。您可以查找标头、使用 .htaccess 文件以及使用令牌。这种综合上述方法使得滥用网络服务器变得更加困难——大多数滥用行为来自于人们试图找到一个容易利用的漏洞。需要记住的重要一点是,您不能因为部署了“最好”的保护而自满,或者因为您拥有如此多的保护层而似乎无法破解。如果有人真的非常想要并且有时间,他们就会找到办法。这些类型的预防措施实际上只是起到威慑作用,阻止那些懒惰、好奇和恶意的人。有针对性的攻击是一个完全独立的安全类别,通常更集中于服务器级别的安全问题。

htaccess 示例。这不会是您放在根目录中的内容,而是放在子文件夹中,其中包含永远不应该从地址栏调用的脚本:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?_YOUR_DOMAIN_NAME_HERE.com [NC]
RewriteRule \.(php)$ - [NC,F,L]
Run Code Online (Sandbox Code Playgroud)

查看这篇文章,了解有关使用令牌系统的信息:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet