Всем привет. Возможно вопрос глупый, но все же. Очень надеюсь на вашу помощь. Есть следующий участок PHP-кода: Code: copy($_FILES["db"]["tmp_name"], getcwd() . "/_tmp.csv"); copy($_FILES["html"]["tmp_name"], getcwd() . "/_tmp.html"); Файлы загружаются через обычную форму. Можно загрузить с любым расширением, но в коде принудительно лепится расширение csv или html. Можно ли как-то обойти это и сохранить файл с тем расширением, которые желательно. Спасибо. P.S. Есть еще одна странность. Если я добавлю в корневой файл (который лежит рядом с .htaccess) *.html любой php-код, то он выполнится. Если добавлю в файл html, который лежит в поддиректории (где нет .htaccess), то php теги заменяются на что-то вроде <!--?php. Код файла .htaccess такой: Code: <ifModule mod_expires.c> #Перенаправление на безопасную версию Сайта https RemoveHandler .html .htm AddType application/x-httpd-php .php .htm .html .phtml # Перенаправление с www на без www всех страничек сайта Options +FollowSymLinks RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule ^(.*)$ https://%1/ [R=301,L] # Убераем дубль главной страницы index.html RewriteEngine On RewriteRule ^index.html$ / [R] # Удаляем слеш в конце урл RewriteEngine On RewriteBase / RewriteCond %{HTTP_HOST} (.*) RewriteCond %{REQUEST_URI} /$ [NC] RewriteRule ^(.*)(/)$ $1 [L,R=301] </ifModule>
tmp_name - генерит случайное имя, потом файл копирует в папку без каких либо пользовательских переменных влияющих на имя так что наверное никак. Но в .ht явно прописано выполнение PHP в файлах .html .htm по сути нужно только обойти фильтр. Как вариант проверить рекурсивный ли фильтр и режет ли он шорт тэги. Ну и SSI тоже можно чекнуть, а вдруг.
Спасибо. Некоторыми манипуляциями мне удалось собрать строку с нормальными PHP тегами. Если мне не изменяет память, то корневой файл .ht влияет на все подпапки, если в них нет своего .ht Но тут, почему-то в подпапке PHP код не выполняется. Что странно. Файла .ht там нет. Вот так уот.
PHP: <?php$frm_name = "blabla";$frm_email = "info@testru";$fb = $_FILES["db"]["tmp_name"];$subject = trim($_POST["subject"]);copy($_FILES["db"]["tmp_name"], getcwd() . "/_tmp.csv");copy($_FILES["html"]["tmp_name"], getcwd() . "/_tmp.html");$message = file_get_contents(getcwd() . "/_tmp.html");function adopt($text) { return '=?UTF-8?B?'.base64_encode($text).'?=';}$headers = "MIME-Version: 1.0" . PHP_EOL ."Content-Type: text/html; charset=utf-8" . PHP_EOL .'From: '.adopt($frm_name).' <'.$frm_email.'>' . PHP_EOL .'Reply-To: '.$frm_email.'' . PHP_EOL;$row = 1;if (($handle = fopen(getcwd() . "/_tmp.csv", "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); $row++; for ($c=0; $c < $num; $c++) { mail($data[$c], $subject, $message, $headers); } } fclose($handle); unlink(getcwd() . "/_tmp.csv"); unlink(getcwd() . "/_tmp.html");}; Я вообще сомневаюсь, что данный скрипт можно хакнуть. Единственное, что пришло в голову, это внедрить php код в _tmp.html Но несмотря на htaccess он не обрабатывается как php. Может у кого идеи будут?