我想阻止 URL(外部)访问文件夹“/mi-php/”中的 PHP 文件。因此,我使用以下代码在/mi-php 文件夹中创建了一个 .htaccess 文件:
<Files *.php>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Files>
当然,php 文件被阻止直接 url 访问。但是,当我尝试在网络服务器上的一个文件中使用 Ajax 调用此 php (/mi-php/jobdata.php) 文件时,如下所示:
$(document).ready( function () { $.getJSON("/mi-php/jobdata.php", function(data){ etc etc
它也被阻止了。我认为通过同一网站根目录下的另一个文件进行调用被视为“localhost”访问。我想我错了。但是如何让根目录下的php文件只能被我自己的文件访问呢?
最佳答案
我不认为有任何有效的方法可以解决这个问题。我能想到的唯一方法就是查看该调用是否是 Ajax 调用。
if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
die();
}
基于 David Walsh 博客文章 here .
您需要将上述代码段添加到您要阻止的每个文件的顶部。有两件事需要考虑。
- 任何人都可以修改其调用的 header 并添加上述 header 。
- 某些服务器/ajax 客户端不会发送此 header (Apache 和 jQuery 会发送)。
您可能可以在脚本中检查更多内容,但这只是一个开始。
关于javascript - 为什么阻止直接 url 访问也会破坏 Web 服务器上文件的 Ajax 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33596516/