有一些脚本我只通过ajax使用,我不希望用户直接从浏览器运行这些脚本。我使用jQuery进行所有ajax调用,并将所有ajax文件保存在一个名为ajax的文件夹中。
因此,我希望创建一个htaccess文件来检查ajax请求(HTTP_X_REQUESTED_WITH),并拒绝该文件夹中的所有其他请求。(我知道http报头是可以伪造的,但我想不出更好的解决方案)。我试过这个:
ReWriteCond %{HTTP_X_REQUESTED_WITH} ^$
ReWriteCond %{SERVER_URL} ^/ajax/.php$
ReWriteRule ^.*$ -F
但是,它不起作用。我做错了什么?有没有其他方法可以达到类似的结果。(我不想检查每个脚本中的头)。
发布于 2010-12-20 00:26:49
缺点:阿帕奇:-(
非标准HTTP Header中的X-Requested-With
。
你根本不能在apache中读取它(既不能通过ReWriteCond %{HTTP_X_REQUESTED_WITH}
也不能通过%{HTTP:X-Requested-With}
),所以不可能在.htaccess或相同的地方检查它。:-(
丑女:脚本:-(
它只在脚本中可访问(例如,php),但是你说你不想在所有的脚本中都包含一个php文件,因为文件太多了。
优点: auto_prepend_file :-)
auto_prepend_file
指定在主文件之前自动解析的文件的名称。您可以使用它自动包含一个"checker“脚本。
因此在ajax文件夹中创建一个.htaccess
php_value auto_prepend_file check.php
并创建您想要的check.php
:
<?
if( !@$_SERVER["HTTP_X_REQUESTED_WITH"] ){
header('HTTP/1.1 403 Forbidden');
exit;
}
?>
您可以根据需要对其进行自定义。
发布于 2010-12-17 16:16:29
我假设您的所有ajax脚本都在一个目录AJAX中,因为您在不起作用的示例中引用了^/ajax/.php$。
在此文件夹/ajax/
中放置一个包含以下内容的.htaccess
文件:
SetEnvIfNoCase X-Requested-With XMLHttpRequest ajax
Order Deny,Allow
Deny from all
Allow from env=ajax
这样做的目的是拒绝任何没有XMLHttpRequest头的请求。
发布于 2010-12-15 01:19:16
只有几个预定义的HTTP_*变量映射到HTTP头,可以在RewriteCond中使用。对于任何其他HTTP标头,您需要使用%{HTTP:header}变量。
只要改变就好
ReWriteCond %{HTTP_X_REQUESTED_WITH} ^$
至:
ReWriteCond %{HTTP:X-Requested-With} ^$
https://stackoverflow.com/questions/3466802
复制相似问题