我需要一种方法来阻止对 php 文件的所有访问,但允许向其发送 xmlhttp 请求的 javascript 文件。该 js 文件托管在我的服务器上,并且必须保留在我的服务器上才能正常工作
我有以下
header('Access-Control-Allow-Origin: *');
但这允许任何人访问它。
好吧,我认为这是不可能的。任何人都可以向您的服务器发出请求,但您的服务器会选择响应谁以及如何响应请求。现在,如果您只希望服务器响应您的 JS,那么您必须在从 JS 发出 HTTP 请求时通知服务器。如果不暴露您的 Javascript 文件的身份,则无法做到这一点,在此基础上您的 JS 可以被服务器识别。但是任何人都可以打开您的 JS 并阅读它并弄清楚您是如何提出请求并使用相同的东西。
一种可能的解决方案是,使用 header('Access-Control-Allow-Origin: *') 允许每个人向您的服务器发出请求,但在服务器端,在您的数据库中保留允许的域/来源列表可能使用或将要在其网站上使用您的 JS 文件的服务器。根据您获得的 AJAX 请求,您从数据库中检查是否允许请求的来源并做出相应的响应。现在,如果有人试图通过您的 JS 以外的任何其他方式请求您的 PHP 文件,则根据您数据库中的数据,您可以拒绝该请求或接受该请求。如果允许的用户/网站这样做,那么他们将故意弄乱自己的数据。
试试这个:
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) <> 'xmlhttprequest')
{
die('direct access is not allowed');
}
此外,您始终可以检查诸如 $_SERVER['HTTP_REFERER'] 之类的引荐来源网址,以确保只有您域中的脚本才能访问它。