在我多年来创建的各种PHP登录系统中,我尝试了各种不同的页面保护方法。
我总是使用.htaccess,它将所有请求路由到index.php。但是,如果您直接键入某个页面的地址(如果您知道的话),它将加载,这显然不是很安全。
在一台服务器上,我尝试将所有“安全”页面放在public_html 之外。这很有效。这意味着你不能再转到'folder / products / product.php'了。大!这意味着我可以将所有请求放入包含的页面中,并完全控制谁查看该页面。
但是,我遇到了另一台服务器上的问题,基本上它不允许我访问httpdocs
文件夹之外的任何内容。好吧,不是严格来说,我可以访问,打开FastCGI支持,但我得到会话写入错误。关闭它,然后打开PHP作为Apache模块,我得到basedir restrictions
。
好。那么我怎样才能确定我只能 一个页面?即使它在公共文件夹中?是否有某种.htaccess我可以放在那里,这将阻止任何人从外面访问它?或密码可以工作,如果我密码每个文件夹,这是否意味着我仍然可以包含文件?
我真的需要一个很好的最终解决方案。一个可以在所有服务器上运行的,我能看到发生的唯一方法是将所有内容保存在公共文件夹中。
答案 0 :(得分:2)
如果要禁止访问目录及其所有子目录,可以添加.htaccess
deny from all
。只要不被“更深层次”的htaccess文件覆盖,就足够了。
此外,您可能想要检查“大”框架如何构建其代码。 (例如symfony,zend等)。
进一步阅读:
答案 1 :(得分:1)
一种方法是做这样的事情,基本上禁止那些作为顶级脚本运行:
在您希望提供的所有端点中,首先要设置全局标记。
<?php
$GLOBALS['INSIDE_AN_ENDPOINT'] = true;
然后,在每个包含文件中,只需确保在继续之前设置了标志。
<?php
if (!isset($GLOBALS['INSIDE_AN_ENDPOINT'])) { header('Status: 403 Forbidden'); exit; }