首页 > 解决方案 > 阻止直接访问文件的问题

问题描述

我试图拒绝通过浏览器直接访问 do.php 文件。它可以工作,但是这个文件在一些 ajax 脚本中使用,所以一旦我使用上面的代码,它也会阻止文件被 ajax 调用。或执行,我希望它被其他文件访问,而不是在浏览器中直接访问

<Files "do.php">  
  Order Allow,Deny
  Deny from all
</Files>

标签: php.htaccess

解决方案


您想要做的事情实际上是不可能的,如果您想将它用于 AJAX 请求,该文件必须是可访问的,并且没有万无一失的方法可以区分您的 AJAX 请求和尝试手动请求文件的人。

通常 AJAX 请求将包含一个额外的X-Requested-With: XMLHTTPRequest标头。您可以在脚本中检查该标头,如果未设置,则会发出错误。

if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest'){
    http_response_code(403);
    echo 'Direct access denied';
    exit;
}

这将阻止您的临时用户尝试仅在新的浏览器选项卡中打开页面,但不会阻止某人使用允许设置标头(如 cURL 或脚本语言)的其他工具访问它。


推荐阅读