此脚本是否容易受到LFI(本地文件注入)的影响?

时间:2011-05-18 08:52:33

标签: php security code-injection

我想知道这个小片段是否受到本地文件注入漏洞的影响。

<?php
$lang = $_GET['lang'];
include '/some/dir/prefix_'.$lang.'whatever';

我知道通过在请求中放入'%00'(空字节)可以忽略的内容。但是如果/ some / dir /目录中没有以'prefix_'开头的子目录,那么漏洞就会发生吗?怎么样?

预先感谢anwser。

3 个答案:

答案 0 :(得分:3)

你的意思是这样吗?

$lang .= 'en/../../../../../etc/passwd' . 0x00;

你可以通过

来避免这种情况
$path = '/some/dir/prefix_'.$_GET['path'].'whatever';
$path = realpath($path);
if (($path !== false) && (strncmp('/dir/some/prefix_', $path, 17) === 0)) {
  // $path is fine
}

如果路径存在并且它确实位于目录树下,则测试是否允许它存在。这应该足够了。

答案 1 :(得分:2)

直接在代码中使用用户输入始终是危险的 最好让它检查值是否在可接受值的数组中。

答案 2 :(得分:1)

嗯,你可以列出这个,比如

$possible_languages = array('en','fr','pt'); #preferably not hardcoded
$lang = $_GET['lang']
if( in_array($lang, $possible_languages) ){
     # do your thing
}
else {
    #error out
}

基本上......永远不要相信用户输入。