代码之家  ›  专栏  ›  技术社区  ›  Vikash

使用htaccess拒绝ajax文件访问

  •  15
  • Vikash  · 技术社区  · 14 年前


    /阿贾克斯/ .php文件$
    重写规则^.*$-

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

    5 回复  |  直到 14 年前
        1
  •  25
  •   Ehsan    14 年前

    坏处:阿帕奇:-(

    X-Requested-With HTTP Header .

    你根本无法在apache中阅读它(也不能通过 ReWriteCond %{HTTP_X_REQUESTED_WITH} 也不是通过 %{HTTP:X-Requested-With}

    丑恶:剧本:-(

    它只是可以在脚本中访问(例如php),但是您说您不想在所有脚本中都包含php文件,因为文件太多了。

    好:自动预处理文件:-)

    • 但是。。。有一个简单的技巧可以解决它:-)

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

    所以创建一个 .htaccess

    php_value auto_prepend_file check.php
    

    创造 check.php 如您所愿:

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

        2
  •  17
  •   dyve    14 年前

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

    /ajax/ 放置 .htaccess

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

        3
  •  1
  •   Jonathan Amend    14 年前

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

    只要改变

    ReWriteCond %{HTTP_X_REQUESTED_WITH} ^$
    

    收件人:

    ReWriteCond %{HTTP:X-Requested-With} ^$
    
        4
  •  0
  •   Robert    14 年前

    只要检查一下 if($_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest'){ 在文档的开头,如果未设置,则不返回任何内容。

    编辑 原因如下: http://github.com/jquery/jquery/blob/master/src/ajax.js#L370

    编辑2 我的错,再看一遍你的帖子。您也可以将一个文件夹设置为web无法访问,然后只需要一个标准的ajax.php文件就可以了 include('./private/scripts.php') 因为你的服务器仍然可以访问它,但是没有人可以从他们的浏览器查看。

        5
  •  0
  •   Brian H    14 年前

    使用.htaccess的另一种方法是使用$\u SERVER['HTTP\u REFERER']变量来测试脚本是否正在从您的页面而不是从其他站点等访问。