使用htaccess拒绝ajax文件访问?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (27)

有一些脚本只能通过ajax使用,我不希望用户直接从浏览器运行这些脚本。我使用jQuery进行所有ajax调用,并将所有ajax文件保存在名为ajax的文件夹中。

所以,我希望创建一个htaccess文件来检查ajax请求(HTTP_X_REQUESTED_WITH)并拒绝该文件夹中的所有其他请求。(我知道http头可以伪造,但我想不出更好的解决方案)。我试过这个:

ReWriteCond%{HTTP_X_REQUESTED_WITH} ^ $ ReWriteCond%{SERVER_URL} ^ / ajax / .php $ ReWriteRule ^。* $ - [F]

但是,它不工作。

提问于
用户回答回答于

auto_prepend_file

auto_prepend_file指定在主文件之前自动分析的文件的名称。可以使用它自动包含“检查器”脚本。

所以.htaccess在ajax文件夹中创建一个

php_value auto_prepend_file check.php

并创建check.php你想要的:

<?
if( !@$_SERVER["HTTP_X_REQUESTED_WITH"] ){
        header('HTTP/1.1 403 Forbidden');
        exit;
}
?>

可以根据需要自定义。

用户回答回答于

我假设你将所有的AJAX脚本放在一个目录ajax中,因为你在非工作示例中引用了^ / ajax / .php $。

在此文件夹中/ajax/放置一个.htaccess包含以下内容的文件:

SetEnvIfNoCase X-Requested-With XMLHttpRequest ajax
Order Deny,Allow
Deny from all
Allow from env=ajax

这样做会拒绝没有XMLHttpRequest头的任何请求。

扫码关注云+社区