Heim > php教程 > php手册 > 如何安全的Include文件

如何安全的Include文件

WBOY
Freigeben: 2016-06-06 20:11:43
Original
910 Leute haben es durchsucht

似乎多数人都觉得Include文件是一件非常简单的事情,可惜漏洞往往出现在我们忽视的地方。正所谓千里之堤溃于蚁穴,二战期间,法国人寄希望与马奇诺防线,却忽视了原本认为非常安全的阿登高地,让德国人有机可乘,最终的结果大家都知道了。 下面这个例子虽然

似乎多数人都觉得Include文件是一件非常简单的事情,可惜漏洞往往出现在我们忽视的地方。正所谓千里之堤溃于蚁穴,二战期间,法国人寄希望与马奇诺防线,却忽视了原本认为非常安全的阿登高地,让德国人有机可乘,最终的结果大家都知道了。

下面这个例子虽然是我杜撰的,但是我确信现实情况里一定存在类似的问题:

<?php $debug = false;
// ...
$config = include 'config.php';
// ...
if ($debug) {
    phpinfo();
}
?>
Nach dem Login kopieren

码农在代码中埋了一个调试开关,缺省是关闭状态,必要的时候可以开启,以便显示一些特殊的信息,同时代码里包含了一个配置文件,它的内容大致如下所示:

<?php return array(
    'foo' => '...',
    'bar' => '...',
);
?>
Nach dem Login kopieren

突然有一天,码农因为一些其它的缘由修改了配置文件,引入了一些临时变量:

<?php $debug = true;
$config = array(
    'foo' => '...',
    'bar' => '...',
);
/*
if ($debug) {
    var_dump($config);
}
*/
return $config;
?>
Nach dem Login kopieren

结果问题产生了!配置文件里的临时变量(debug)污染了其它脚本的变量空间,进而导致代码执行的结果不再符合预期,最终问题也就在所难免了。

如何安全的Include文件?很简单,在Include的时候注意限制变量的作用域即可:

<?php $config = call_user_func(function() {
    return include 'config.php';
});
?>
Nach dem Login kopieren

类似的做法在Javascript中很常见,但在PHP中却鲜有人注意,你的代码有问题么?

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage