2013-03-27 42 views
0

在我多年来所做的各种PHP登录系统中,我尝试了各种不同的方法来保护页面。保护公众页面的安全

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

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

但是,我在一台不同的服务器上遇到了一个问题,基本上它不允许我访问httpdocs文件夹以外的任何东西。好吧,不完全正确,我可以访问,打开FastCGI支持,但我会得到会话写入错误。关闭它,并打开PHP作为Apache模块,我得到basedir restrictions

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

我真的需要一个很好的最终解决方案。一个可以在所有服务器上工作的方法,并且我可以看到发生的唯一方法是将所有内容都保存在公用文件夹中。

+0

添加'与.htaccess''从all'否认。 – Yoshi 2013-03-27 08:37:04

+0

@Yoshi为每个文件夹添加一个.htaccess? – Chud37 2013-03-27 08:41:26

+0

至少每一个在根层面(可以这么说)。但它会被子文件夹继承(只要它不被覆盖) – Yoshi 2013-03-27 08:43:11

回答

2

如果你想禁止访问的目录和所有它的子目录下,你可以添加一个.htaccessdeny from all。只要这不会被“更深”的htaccess文件覆盖,就足够了。

你也可能想要检查“大”框架如何构造他们的代码。 (例如symfony,zend等)。

延伸阅读:

+0

非常感谢。我不知道这个规则。这是一个很大的帮助。 – Chud37 2013-03-27 09:22:12

1

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

在所有的终端,你希望成为的,因为你做的第一件事,设置一个全局旗。

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

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

<?php 
if (!isset($GLOBALS['INSIDE_AN_ENDPOINT'])) { header('Status: 403 Forbidden'); exit; } 
+0

我不喜欢那种方法。我不希望为每个页面添加一些内容以确保它正确加载。 – Chud37 2013-03-27 08:41:03