Javascript 为什么阻止直接url访问也会破坏Web服务器上文件的Ajax调用?

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文件只对根目录下我自己的文件访问

我想阻止对文件夹“/mi PHP/”中PHP文件的Url(外部)访问。因此,我使用以下代码在/mi php文件夹中创建了一个.htaccess文件:

<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();
}
基于大卫·沃尔什的博客文章

您需要在试图阻止的每个文件的顶部添加上述代码段。有两件事要考虑。

  • 任何人都可以修改通话的标题并添加上述标题
  • 一些服务器/ajax客户端不发送此头(Apache和jQuery发送)
  • 您可以签入更多脚本,但这只是一个开始。

    我建议的方法如下:

    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'] );
    ?>