PHP-许多文件开头的“定义或退出”?

时间:2011-11-18 22:16:11

标签: php

我一直在检查一些PHP源代码,而且我经常找不到以

开头的文件
defined('__someconstant__') or exit();

我知道如果以前的文件定义__someconstant__,这会阻止文件被直接访问,但我不知道这是否真的有必要...是不是(甚至非基于PHP)更清洁这样做的方法是不在每个文件中引入这些额外的代码?

3 个答案:

答案 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是一个),但对于与广大受众共享的软件,您无法真正依赖那些技术。您可以依赖文件顶部的简单条件。