首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用htaccess拒绝ajax文件访问

使用htaccess拒绝ajax文件访问
EN

Stack Overflow用户
提问于 2010-08-12 18:42:44
回答 5查看 8.7K关注 0票数 15

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

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

ReWriteCond %{HTTP_X_REQUESTED_WITH} ^$

ReWriteCond %{SERVER_URL} ^/ajax/.php$

ReWriteRule ^.*$ -F

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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;
}
?>

您可以根据需要对其进行自定义。

票数 25
EN

Stack Overflow用户

发布于 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头的请求。

票数 17
EN

Stack Overflow用户

发布于 2010-12-15 01:19:16

只有几个预定义的HTTP_*变量映射到HTTP头,可以在RewriteCond中使用。对于任何其他HTTP标头,您需要使用%{HTTP:header}变量。

只要改变就好

ReWriteCond %{HTTP_X_REQUESTED_WITH} ^$

至:

ReWriteCond %{HTTP:X-Requested-With} ^$
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3466802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档