![](/img/trans.png)
[英]Modify .htaccess to deny access into folder, but allow access only from my site using ajax to specific files
[英]Deny ajax file access using htaccess
我只使用ajax使用了一些脚本,我不希望用户直接从浏览器运行这些脚本。 我使用jQuery进行所有ajax调用,并将所有ajax文件保存在名为ajax的文件夹中。
所以,我希望创建一个htaccess文件来检查ajax请求(HTTP_X_REQUESTED_WITH)并拒绝该文件夹中的所有其他请求。 (我知道http标头可以伪造,但我想不出更好的解决方案)。 我试过这个:
ReWriteCond%{HTTP_X_REQUESTED_WITH} ^ $
ReWriteCond%{SERVER_URL} ^ / ajax / .php $
ReWriteRule ^。* $ - [F]
但是,它不起作用。 我做错了什么? 有没有其他方法可以达到类似的结果。 (我不想在每个脚本中检查标题)。
X-Requested-With
不是标准的HTTP标头 。
您根本无法在apache中读取它(无论是ReWriteCond %{HTTP_X_REQUESTED_WITH}
还是%{HTTP:X-Requested-With}
),因此无法在.htaccess或同一位置检查它。 :-(
它只是在脚本中可访问(例如php),但是你说你不希望因为文件数量而在所有脚本中都包含一个php文件。
auto_prepend_file
指定在主文件之前自动解析的文件的名称。 您可以使用它自动包含“检查器”脚本。
所以在ajax文件夹中创建一个.htaccess
php_value auto_prepend_file check.php
并根据需要创建check.php
:
<?
if( !@$_SERVER["HTTP_X_REQUESTED_WITH"] ){
header('HTTP/1.1 403 Forbidden');
exit;
}
?>
您可以根据需要自定义它。
我假设您在ajax目录中拥有所有AJAX脚本,因为您在非工作示例中引用了^ / ajax / .php $。
在此文件夹/ajax/
放置一个包含此内容的.htaccess
文件:
SetEnvIfNoCase X-Requested-With XMLHttpRequest ajax
Order Deny,Allow
Deny from all
Allow from env=ajax
这样做是在没有XMLHttpRequest标头的情况下拒绝任何请求。
只有少数预定义的HTTP_ *变量映射到可以在RewriteCond中使用的HTTP头。 对于任何其他HTTP标头,您需要使用%{HTTP:header}变量。
只是改变
ReWriteCond %{HTTP_X_REQUESTED_WITH} ^$
至:
ReWriteCond %{HTTP:X-Requested-With} ^$
只需检查if($_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest'){
在文档的开头,如果未设置,则不返回任何内容。
编辑原因如下: http : //github.com/jquery/jquery/blob/master/src/ajax.js#L370
编辑2我的不好,只需再次阅读你的帖子。 您也可以让网络无法访问文件夹,然后只有一个标准的ajax.php文件,其中include('./private/scripts.php')
因为您的服务器仍然可以访问它,但没有人会能够从他们的浏览器查看。
使用.htaccess的另一种方法是使用$ _SERVER ['HTTP_REFERER']变量来测试是从页面访问脚本,而不是从其他站点访问等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.