Некоторые проблемы:
$filename = $_GET['filename'];
$fp = fopen('admin/'.$filename, 'w') or die("can't open file");
Что если я использую /page.php?filename=../../../../list_of_secret_passwords
? Это называется атака обхода каталога , от которой нужно защищаться. Кроме того, вам не нужно открывать дескриптор файла (с доступом для записи не меньше), просто используйте file_exists
или is_readable
, чтобы проверить, файл существует.
//echo file_get_contents($filename);
Если эта строка закомментирована, конечно, ничего не произойдет. Вы должны в первую очередь использовать readfile
. file_get_contents
прочитает весь файл в память, затем echo
как обычная строка. Это очень расточительно и может привести к падению вашего скрипта для больших файлов. readfile
выводит файл непосредственно на вывод пользователя, почти не используя дополнительную память.
Это, вероятно, ваша настоящая проблема:
/* $fp = fopen( */ 'admin/'.$filename /* , 'w') or die("can't open file"); */
/* echo file_get_contents( */ $filename /* ); */
'admin/'.$filename
против $filename
Какой это?