停止直接访问 (.htaccess) 并允许 ajax 请求到子文件夹

Posted

技术标签:

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

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

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

Options -Indexes
order   allow,deny
deny    from all

谢谢

【问题讨论】:

【参考方案1】:

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

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

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

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

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

    打开您的 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 替换为您的文件名即可。

【讨论】:

这是阻止我所有的网页加载

以上是关于停止直接访问 (.htaccess) 并允许 ajax 请求到子文件夹的主要内容,如果未能解决你的问题,请参考以下文章

.htaccess脚本阻止远程访问并允许本地ip

.htaccess 拒绝访问图像文件夹,但允许访问查看单个图像

阻止通过 http 直接访问文件,但允许 php 脚本访问

.htaccess 只允许访问 index.php 和一个目录

停止对文件夹中所有文件的直接访问,但允许 ajax 请求

.htaccess 允许图像直接显示