【问题标题】:stop direct access (.htaccess) and allow ajax request to subfolder停止直接访问 (.htaccess) 并允许 ajax 请求到子文件夹
【发布时间】:2014-01-31 17:14:02
【问题描述】:

我试图停止直接访问子目录和子目录中的 php 文件。我已将以下代码添加到子目录中的 .htaccess 文件中,但是现在 AJAX 请求不起作用。

如何停止访问 www.example.com/subdir,但允许 jQuery 加载和 ajax 函数工作?

Options -Indexes
order   allow,deny
deny    from all

谢谢

【问题讨论】:

    标签: php jquery ajax .htaccess redirect


    【解决方案1】:

    我会将 apache 指令放在一边,并且 - 或许 - 专注于基于 php 的解决方案:

    1. 确保包含 jquery ajax 调用的文件具有“.php”扩展名。 (当然在该文件中,所有 jquery 都必须包含在 <script></script> 标记内。

    2. 在 ajax 调用之前的 jquery 函数中,键入:

      <?php $_SESSION["allow"] = "granted" ?>

      (即使它们包含在“脚本”标签中,php标签也会运行)

    3. 打开您的 ajax (php) 文件并在最顶部键入:

    <?php
     session_start();
     if((!isset($_SESSION['allow'])) && ($_SESSION['allow']!="granted")){die();}else
     unset($_SESSION['allow']);
    
     (...rest of your php code here...)
    
    ?>
    

    ...你就完成了!

    附:当然,您可以(或更好:应该)重命名会话并赋予它们不同或更复杂的值,但我只是想指出基本思想......快乐编码!

    【讨论】:

      【解决方案2】:

      如果您的 ajax 函数访问该文件夹中的某个文件,您不能。由于 AJAX 是从客户端浏览器发送的请求。

      【讨论】:

        【解决方案3】:

        将此代码放入您的DOCUMENT_ROOT/.htaccess 文件中:

        RewriteEngine On
        
        ## disable direct access (but allow internal or AJAX requests)
        RewriteCond %{HTTP_REFERER} !^$ 
        RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.com/ [NC] 
        RewriteRule ^subdir(/|$) - [F,NC]
        

        用您自己的域名替换www.domain.com

        请注意,这使用%{HTTP_REFERER} 标头来执行此阻塞,并且可以操纵此标头值。

        【讨论】:

        • 当您说“操纵此标头值”时,请您详细说明一下吗?
        • 这意味着客户可以在%{HTTP_REFERER} heade中放入自定义值
        【解决方案4】:

        我找到了使用会话的最简单的解决方案。

        • project_folder
          • index.php
          • 子目录
            • db_config.php

        假设您想限制对 db_config.php 的直接访问,

        你可以这样做。 从根目录打开 index.php 并将其添加到代码的第一行:

        $sess = session_start();
        $_SESSION["nuclear_weapon_key"] = "lolva";
        

        现在转到 sub_dir -> 打开 db_config.php 将此添加到页面顶部:

        $sess = session_start();
        if(isset($_SESSION['nuclear_weapon_key']) && $_SESSION['nuclear_weapon_key'] === "lolva"){ } else{ echo "LOL"; die();}
        

        对包含文件/s 的任何 ajax/jquery 重复此操作。

        它对我有用。

        【讨论】:

          【解决方案5】:

          您可以使用 mod_rewrite 来限制对目录中所有下注特定文件的访问。将此添加到该目录中的.htaccess

          RewriteEngine On
          RewriteCond %{REQUEST_FILENAME} !(jsonp)|(ws)|(ajax)
          RewriteRule .* - [R=404,L]
          

          只需将 jsonp ws ajax 替换为您的文件名即可。

          【讨论】:

          • 这是阻止我所有的网页加载
          猜你喜欢
          • 2014-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-10-14
          相关资源
          最近更新 更多