Javascript 为什么阻止直接url访问也会破坏Web服务器上文件的Ajax调用?
我想阻止对文件夹“/mi PHP/”中PHP文件的Url(外部)访问。因此,我使用以下代码在/mi php文件夹中创建了一个.htaccess文件:Javascript 为什么阻止直接url访问也会破坏Web服务器上文件的Ajax调用?,javascript,php,.htaccess,Javascript,Php,.htaccess,我想阻止对文件夹“/mi PHP/”中PHP文件的Url(外部)访问。因此,我使用以下代码在/mi php文件夹中创建了一个.htaccess文件: <Files *.php> Order deny,allow Deny from all Allow from 127.0.0.1 </Files> 它也被封锁了。我认为由同一网站根目录下的另一个文件调用被认为是“localhost”访问。我想我错了。但是如何使php文件只对根目录下我自己的文件访问
<Files *.php>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Files>
它也被封锁了。我认为由同一网站根目录下的另一个文件调用被认为是“localhost”访问。我想我错了。但是如何使php文件只对根目录下我自己的文件访问呢?我看不出有任何可靠的方法可以解决这个问题。我能想到的唯一方法是查看调用是否是Ajax调用
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
die();
}
基于大卫·沃尔什的博客文章
您需要在试图阻止的每个文件的顶部添加上述代码段。有两件事要考虑。
RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?arvixe\.com/ [NC]
RewriteRule ^mi-php(/|$) - [F,NC]
以上内容将放在httpd服务器的文档根目录中
请注意,客户端可以发送假头来绕过这些。此外,这些值可能会从请求中删除,完全与用户的防火墙/ISP设置有关。不要100%依赖于此
您可以尝试的另一种方法是,在AJAX调用之前,将以下值存储在会话变量中:
<?php $_SESSION['ajax'] = 'allowed';
您是否使用IPv6?我不确定您的问题。该网页存在此问题,请参见http://magik-info.com/index.php/job-list/
不确定IPV6如果您尝试从外部访问它,则需要在那里添加外部IP。127.0.0.1仅在您自己的计算机上访问时才正确。您所说的“本地文件”是什么意思?该示例无法解决您的问题。我想说,要100%安全地解决这个问题是不可能的。总是有办法解决任何问题。永远不要相信引用标头存在。有许多路由器/VPN和防火墙出于隐私原因将其删除。您的方法有效!非常感谢您对我的帮助,尽管我没有足够的知识来完全理解您的评论。但正如你所说,这是一个起点。顺致敬意,
<?php $_SESSION['ajax'] = 'allowed';
<?php
session_start();
if( !isset($_SESSION['ajax']) and $_SESSION['ajax'] !== 'allowed' )
die();
else
unset( $_SESSION['ajax'] );
?>