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

标签 javascript php .htaccess

我想阻止 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 .

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

  1. 任何人都可以修改其调用的 header 并添加上述 header 。
  2. 某些服务器/ajax 客户端不会发送此 header (Apache 和 jQuery 会发送)。

您可能可以在脚本中检查更多内容,但这只是一个开始。

关于javascript - 为什么阻止直接 url 访问也会破坏 Web 服务器上文件的 Ajax 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33596516/

相关文章:

.htaccess - 我想重定向我网站的 15000 页

javascript - React 子组件未从父组件发送更新状态

javascript - 如何在 javascript 中用数字写日期?

php - 尝试在 codeigniter 事件记录中附加(添加到)小时列

php - 如何删除实体是从 generate :doctrine:entity 生成的

php - 如何确保始终只使用干净的 URL?

javascript - 让 jQuery .click() 激活不止一次

javascript - 从 JSON 创建数组数组

php - 我想显示警报框,但要显示一定的时间间隔。在javascript或php中可以吗?

php - 如何锁定,防止更改上传的文件