0

在我多年来制作的各种 PHP 登录系统中,我尝试了各种不同的方法来保护页面。

我总是使用 .htaccess,它将所有请求路由到 index.php。但是,如果您直接键入某个页面的地址(如果您知道的话),它将加载,这显然不是很安全。

在一台服务器上,我尝试将所有“安全”页面放在public_html 之外。这很好用。这意味着您不能再转到“文件夹/产品/product.php”。伟大的!这意味着我可以将对该页面的所有请求放在一个包含中,并完全控制谁查看该页面。

但是,我在另一台服务器上遇到了问题,基本上它不允许我访问httpdocs文件夹之外的任何内容。好吧,严格来说,我可以访问,打开 FastCGI 支持,但我得到会话写入错误。将其关闭,然后将 PHP 作为 Apache 模块打开,我得到basedir restrictions.

好的。那么我如何确定一个页面只能由我访问呢?即使它在公共文件夹中?是否有某种 .htaccess 我可以放在那里,这会阻止任何人从外部访问它?或者如果我对每个文件夹都设置密码,密码是否有效,这是否意味着我仍然可以包含这些文件?

我真的需要一个好的最终解决方案。一种适用于所有服务器的方法,我可以看到发生这种情况的唯一方法是将所有内容保存在公用文件夹中。

4

2 回答 2

2

如果您想禁止访问一个目录及其所有子目录,您可以添加一个.htaccesswith deny from all。只要这不被“更深”的 htaccess 文件覆盖,就足够了。

此外,您可能想检查“大”框架如何构建其代码。(例如 symfony、zend 等)。

进一步阅读:

于 2013-03-27T08:49:10.830 回答
1

一种方法是做这样的事情,基本上禁止那些作为顶级脚本运行:

在您希望服务的所有端点中,作为您做的第一件事,设置一个全局标志。

<?php
$GLOBALS['INSIDE_AN_ENDPOINT'] = true;

然后,在每个包含文件中,只需确保在继续之前设置了该标志。

<?php
if (!isset($GLOBALS['INSIDE_AN_ENDPOINT'])) { header('Status: 403 Forbidden'); exit; }
于 2013-03-27T08:39:16.207 回答