阻止直接访问文件的问题

时间:2019-06-29 17:40:35

标签: php .htaccess

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

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

1 个答案:

答案 0 :(得分:0)

实际上不可能实现,如果要用于AJAX请求,则文件必须可访问,并且没有万无一失的方式来区分AJAX请求和尝试手动请求文件的人。 / p>

通常,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或脚本语言)的其他工具访问该页面。