的index.php:PHP定义安全问题?
define("included", true);
包含的页面:
if (included !== true) header('HTTP/1.1 404 Not Found');
目的的代码是直接禁止访问,但允许它,如果包括在内。我不确定这是否会带来风险。我不允许覆盖.htaccess
,所以我坚持使用PHP替代方案。
任何帮助将不胜感激!
的index.php:PHP定义安全问题?
define("included", true);
包含的页面:
if (included !== true) header('HTTP/1.1 404 Not Found');
目的的代码是直接禁止访问,但允许它,如果包括在内。我不确定这是否会带来风险。我不允许覆盖.htaccess
,所以我坚持使用PHP替代方案。
任何帮助将不胜感激!
一个性感办法是...
defined('included') OR exit;
也就是说,使用正确的函数(defined()
)查看是否定义了一个值,然后利用short circuit evaluation。另外,您可以使用现有的定义而不是专门创建一个定义,例如,引导文件可以定义类似...
define('DOCROOT', realpath(basename(__FILE__)));
...在这种情况下,你可以安全地使用DOCROOT
。
你也应该保持除了你的引导任何PHP文件的文档根目录上面,然后确保你的网站是安全的从directory traversal attacks :)
这是好的,但我想将其更改为:
if (!defined('included')) {
header('HTTP/1.1 404 Not Found');
// actually make the request stop, since clients will not stop on 404 headers
die();
}
欢呼
通常您使用安装喜欢自己正在做的,但执行die
或exit
放弃它,而不用担心重定向。即使他们知道该文件存在,但如果您无法访问该内容,则无用。
的common.php(或你的index.php,这取决于你的设置)
<?php
define('IN_PAGE',true);
...
?>
include_file.php
<?php
defined('IN_PAGE') or die('Unallowed access'); // or header('HTTP/1.0 404 Not Found'); exit;
...
?>
如何只将所有不属于文件应该直接访问webserver的文档根目录之外的目录?
一个更简单的方法是:
<?php
@runtime_presence();
如果函数存根不集中前确定这导致了致命错误。 (标题重定向和一个漂亮的错误消息没有用作安全措施。)
似乎很好。唯一的建议是在if中添加`exit;`语句,因为头文件不会终止应用程序,它仍然会处理。这和常量通常是所有的大写,这将是我的其他建议:) – 2011-02-10 23:24:11
这通常表示一个不好的应用程序设计。应该避免在main中执行的代码。包括应该定义函数,所以这种解决方法是不必要的。 – mario 2011-02-10 23:27:21