我正在幫助我的朋友保護他的網站。他給我的源文件,我發現一些東西,在我看來,可能會引起很多問題,但是,和以前一樣,我的朋友說什麼這部分代碼是安全的:is_file()和本地文件包含漏洞
if(is_file('foo/' . $_POST['f'] . '/bar/foo.php'))
{
include('foo/' . $_POST['f'] . '/bar/foo.php');
}
我已經證明他說,我可以繞過include()
功能,但他說,與is_file()
這部分代碼是100%安全的,請幫助我向他展示代碼不安全,或說服我這個代碼是安全的。
該代碼繞過include()
功能(WINDOWS):
curl_setopt($ch, CURLOPT_POSTFIELDS, 'f=../foo/bar.php' . str_repeat('.', 4086)); // without is_file() check this request leads to LFI
但仍is_file()
返回這種結構的虛假
這是不可利用的,但爲什麼這個代碼甚至在這裏?什麼用例提示你加載這樣的PHP文件? – Blender 2013-05-05 08:30:24
有一個if檢查'is_file',所以它不會拋出任何東西。他可以通過的唯一一件事是不包括該文件。 – 2013-05-05 08:31:52
我認爲最好檢查'$ _POST ['f'];'因爲黑客可以使用它來包含來自不同位置的文件,如'foo'。'/ ../foo2'。'/ bar/foo。 php /'也可能是這個''foo'。'/ ../foo2/someFileWhichWillCauseProblem.php?'。'/ bar/foo.php''因爲包含''foo'。'/ ../foo2/someFileWhichWillCauseProblem.php'與一個額外的參數'?/ bar/foo.php'。這是危險的。所以它的強項建議你不要那樣做。 – ncm 2013-05-05 08:35:08