拒绝访问服务器上的某些文件


Deny access to certain files on server

我有一个时事通讯订阅系统,我想拒绝访问某些文件(例如订阅用户的脚本)。我遇到的问题是我需要拒绝来自外部的任何人访问文件,但脚本需要相互访问。

例如,我有以下文件:

  • 索引.html
  • 订阅.php

应该无法通过键入相应的 URL 来访问订阅.php。但是,index.html 需要能够将输入到表单中的数据发送到订阅.php。

这是我到目前为止尝试过的:

我将 index.html 留在我的根目录中,并将订阅.php移动到文件夹/restricted。我将文件 .htaccess 添加到受限制的文件夹中。.htaccess只包含: deny from all

当我尝试通过 URL 访问订阅时.php这给了我一个 403 错误,但当我在索引中提交表单时,它也给了我同样的错误.html

的问题:我的.htaccess文件需要是什么样子才能存档我想要的内容,为什么我尝试的内容不起作用?

我遇到的问题是我需要拒绝访问文件 任何来自外部的人,但脚本需要有权访问 彼此。

错了;这与你后来所说的不一致:

我遇到的问题是我需要拒绝访问文件 任何来自外部的人,但脚本需要有权访问 彼此。

没有提交表单;客户端的浏览器正在提交带有 Web 请求的表单。 不要这样想:

索引.html需要能够将输入的数据发送到 订阅表格.php。

这不是正在发生的事情。 index.html包含 html,当在客户端的浏览器上呈现时,它会指示浏览器在何处以及如何提交注册表。

您可以尝试以下几种方法:

  • 表单通常与 POST 请求一起提交。 您可以编写subscribe.php来阻止GET请求并期望获得适当的表单提交信息
  • 可以检查Referer [原文如此]标头,以确保引用网页确实是您的"索引.html";但请注意,这与任何具有已知值的http标头一样,伪造起来微不足道。
  • PHP 会话可用于在发布提交表单之前跟踪客户端对索引的访问.html。 PHP 会话(通常)使用客户端 cookie 来存储会话"令牌",然后在服务器端将会话"令牌"与存储在文件或会话缓存中的信息哈希相关联。 如果编程得当,客户端永远无法访问这些数据,因此只能在会话中为它们设置会话变量"HasVisitedIndex"或任何设置。

可能还有其他解决方案,但正如你所看到的,由于HTTP的无状态客户端-服务器模型,它们都不是完全的灌篮。