使用htaccess拒绝ajax文件访问

Vik*_*ash 15 php apache .htaccess jquery

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

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

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

但是,它不起作用.我做错了什么?有没有其他方法可以达到类似的结果.(我不想在每个脚本中检查标题).

Ehs*_*san 25

坏:阿帕奇:-(

X-Requested-With在非标准的HTTP标头中.

你根本不能在apache中读取它(既不是 ReWriteCond %{HTTP_X_REQUESTED_WITH} 也不是 %{HTTP:X-Requested-With}),所以无法在.htaccess或同一个地方检查它.:-(

丑陋的:脚本:-(

它只是在脚本中可访问(例如php),但是你说你不希望因为文件数量而在所有脚本中都包含一个php文件.

好:auto_prepend_file :-)

  • 但是......有一个简单的方法可以解决它:-)

auto_prepend_file指定在主文件之前自动解析的文件的名称.您可以使用它自动包含"检查器"脚本.

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

php_value auto_prepend_file check.php
Run Code Online (Sandbox Code Playgroud)

check.php根据需要创建:

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

您可以根据需要自定义它.


dyv*_*yve 16

我假设您在ajax目录中拥有所有AJAX脚本,因为您在非工作示例中引用了^/ajax/.php $.

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

SetEnvIfNoCase X-Requested-With XMLHttpRequest ajax
Order Deny,Allow
Deny from all
Allow from env=ajax
Run Code Online (Sandbox Code Playgroud)

这样做是在没有XMLHttpRequest标头的情况下拒绝任何请求.