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

Deny access to certain files on server

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

例如我有以下文件:

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

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

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

当我尝试通过 URL 访问 subscribe.php 时,这给了我一个 403 错误,但是当我在 index.html[=11 中提交表单时,它也给了我同样的错误=]

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

The problem I ran into is that I need to deny access to the files for anyone coming from outside, but the scripts need to have access to each other.

你错了;跟你后面说的不一致:

The problem I ran into is that I need to deny access to the files for anyone coming from outside, but the scripts need to have access to each other.

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

index.html needs to be able to send the data that was input into a form to subscribe.php.

事实并非如此。 index.html 包含 html,当在客户端浏览器上呈现时,指示浏览器在何处以及如何提交注册表单。

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

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

可能还有其他解决方案,但如您所见,其中 none 是一个完整的 slam-dunk,因为 HTTP 的无状态 client-server 模型。