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

时间:2015-01-01 18:04:50

标签: php .htaccess

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

例如,我有以下文件:

  • 的index.html
  • subscribe.php

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

这是我到目前为止所尝试的内容:

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

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

我的问题:我的.htaccess文件需要什么来存档我想要的内容以及为什么我尝试不起作用?

1 个答案:

答案 0 :(得分:0)

  

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

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

  

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

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

  

index.html需要能够将输入的数据发送到   形成subscribe.php。

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

您可以尝试一些事项:

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

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