我一直在检查一些PHP源代码,而且我经常找不到以
开头的文件defined('__someconstant__') or exit();
我知道如果以前的文件定义__someconstant__
,这会阻止文件被直接访问,但我不知道这是否真的有必要...是不是(甚至非基于PHP)更清洁这样做的方法是不在每个文件中引入这些额外的代码?
答案 0 :(得分:4)
为了避免(几乎)每个文件顶部的那些(无用的)行,你可以:
将公共“控制器”文件(例如 index.php )存储在您的网站上名为 web 或 public 的目录中服务器的别名或虚拟主机指向
存储在其他目录中,例如 lib , config , apps ...所有不应直接访问的文件只需输入网址就可以使用网络服务器。
这通常是现有框架such as Symfony 1.x
的结构此外,您可以(当然也会为URL重写)放置.htaccess
文件,但服务器配置错误可能会偶然禁用它,因此将源文件保存在不同的目录中会更好。
答案 1 :(得分:4)
在没有在每个文件中引入这些额外代码的情况下,是否存在(甚至不基于PHP)更简洁的方法?
此类代码段的存在表明代码结构错误,即代码在全局范围内自动执行。您不应该在纯函数/类包含中使用此or exit();
代码。那里会多余。
执行潜在危险行为的代码首先不能通过网络访问。 or exit;
方法是一种解决方法。但是,FilesMatch
文件中应始终附加Deny from All
和.htaccess
。最好设置整个包含目录不可访问。
答案 2 :(得分:1)
添加@ NullUserException的答案......
是的还有其他方法可以防止直接访问文件(.htaccess是一个),但对于与广大受众共享的软件,您无法真正依赖那些技术。您可以依赖文件顶部的简单条件。