Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Форма обратной связи - троянский конь
 
 автор: sova   (13.04.2009 в 11:29)   письмо автору
 
 

Содрал сторонний файл формы обратной связи. Стандартная форма без вложения не интересна. А с вложением получается следующее - прикрепляемый файл закидывается в директорию содержащую скрипт. Т.е. при желании, теоретически можно таким образом закинуть любой файл сценария и вызвать его из командной строки. Проблема в следующем чтобы прикрепляемые файлы записывались допустим в какую то папку "Temp" которая после отправки сразу же очищалась. Либо каким то другим способом. Поскольку в php я полный профан, слёзно прошу указать путь правильный (только не в пешее эротическое)
html форма
<html>
<head>
<title>Отправка сообщения с вложением</title>
</head>
<body>
<h3></h3>
<center><font color=#1E90FF>Отправка сообщения с вложением</font></h3>
<table width=1 border=0>
<form action=simple_mail.php enctype='multipart/form-data' method=post>
<tr><td width=50%>To:</td><td align=right><input type=text name=mail_to maxlength=32></td></tr>
<tr><td width=50%>Subject:</td><td align=right><input type=text name=mail_subject maxlength=64></td></tr>
<tr><td colspan=2>Сообщение:<br><textarea cols=50 rows=8 name=mail_msg></textarea></td>
<tr><td width=50%>Photo:</td><td align=right><input type=file name=mail_file maxlength=64></td></tr>
</tr><tr><td colspan=2><input type=submit value='Отправить'></td></tr>
</form>
</table>
</center>
</body>
</html>
simple_mail.php
<?php
if(empty($_POST['mail_to'])) exit("Введите адрес получателя");
// проверяем правильности заполнения с помощью регулярного выражения
if (!preg_match("/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}$/i", $_POST['mail_to']))
exit("Введите адрес в виде somebody@server.com");
$_POST['mail_to'] = htmlspecialchars(stripslashes($_POST['mail_to']));
$_POST['mail_subject'] = htmlspecialchars(stripslashes($_POST['mail_subject']));
$_POST['mail_msg'] = htmlspecialchars(stripslashes($_POST['mail_msg']));
$picture = "";
// Если поле выбора вложения не пустое - закачиваем его на сервер
if (!empty($_FILES['mail_file']['tmp_name']))
{
// Закачиваем файл
$path = $_FILES['mail_file']['name'];
if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = $path;
}
$thm = $_POST['mail_subject'];
$msg = $_POST['mail_msg'];
$mail_to = $_POST['mail_to'];
// Отправляем почтовое сообщение
if(empty($picture)) mail($mail_to, $thm, $msg);
else send_mail($mail_to, $thm, $msg, $picture);
// Вспомогательная функция для отправки почтового сообщения с вложением
function send_mail($to, $thm, $html, $path)
{
$fp = fopen($path,"r");
if (!$fp)
{
print "Файл $path не может быть прочитан";
exit();
}
$file = fread($fp, filesize($path));
fclose($fp);

$boundary = "--".md5(uniqid(time())); // генерируем разделитель
$headers .= "MIME-Version: 1.0\n";
$headers .="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
$multipart .= "--$boundary\n";
$kod = 'koi8-r'; // или $kod = 'windows-1251';
$multipart .= "Content-Type: text/html; charset=$kod\n";
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n";
$multipart .= "$html\n\n";

$message_part = "--$boundary\n";
$message_part .= "Content-Type: application/octet-stream\n";
$message_part .= "Content-Transfer-Encoding: base64\n";
$message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n";
$message_part .= chunk_split(base64_encode($file))."\n";
$multipart .= $message_part."--$boundary--\n";

if(!mail($to, $thm, $multipart, $headers))
{
echo "К сожалению, письмо не отправлено";
exit();
}
}
?>

  Ответить  
 
 автор: Uzer44   (14.04.2009 в 23:12)   письмо автору
 
   для: sova   (13.04.2009 в 11:29)
 

поставь права 666 на папку куда льётся вложение и сценарий не выполнится
а насчёт очистки загоняеш в переменную имя сего файла потом после отправки удаляеш
а также не лишнем будет фильтрация выполняемых на сервере расширений файлов
те не принимать файлы php php3 итд
или же наоборот создать список только разрешённых к отправке типа jpg zip rar

  Ответить  
 
 автор: DEM   (14.04.2009 в 23:31)   письмо автору
 
   для: sova   (13.04.2009 в 11:29)
 

Я возможно ошибаюсь, но я всегда считал, что ФОРМА ОБРАТНОЙ СВЯЗИ нужна, что бы быстро что-то написать администрации\тех.поддержке и всё. Зачем что-то еще присылать и т.д. и т.п.?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования