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

Форум PHP

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

 

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

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

тема: помогите мне, пожалуйста! (отправка почты)
 
 автор: Виктория   (17.01.2005 в 01:08)
 
 

Люди, я ничего не соображаю в php. Вот у меня есть скрипт, который отправляет письма с моего сайта. Но туда всякие уроды постоянно суют подозрительные програмистские символы, или отправляют письмо размером с километр. Им кажется - это очень смешно. А сегодня страничку с сайта кто-то украл... Этот скрипт у меня на сайте - единственный файл php. Больше я php вообще не использую. Кто нибудь знает, что нужно добавить к скрипту, чтобы защититься в моей ситуации?
С уважением. Вика.
<?php
function _mail ($from, $name, $to, $subj, $what)
{
mail($to, $subj, $what,
"From: $name <$from>
Reply-To: $from
Content-Type: text/plain; charset=windows-1251
Content-Transfer-Encoding: 8bit"
);
}
$ip=getenv('REMOTE_ADDR');
/********* Данные из формы ****************
$name - данные из поля ИМЯ
$from_mail - адресс отправителя письма
$msg - содержание письма
****************************************************/

/********* Остальные данные ***********************
$subj - тема письма
$to_mail - адрес на которое идет письмо
****************************************************/
$subj="Скрипт mail";
$to_mail="z.a.o.vika@mail.ru";

$msg=$msg."\nIP ".$ip;
_mail($from_mail, $name, $to_mail, $subj, $msg);

?>
<html>
<head>
<title>mail</title>
<meta http-equiv="refresh" content="0; url=sendmess.htm">
<meta http-equiv=Content-Type content="text/html; charset=windows-1251">
</head>
<body>
</body>
</html>

   
 
 автор: Sfinks   (17.01.2005 в 01:54)   письмо автору
 
   для: Виктория   (17.01.2005 в 01:08)
 

Замените строку:
_mail($from_mail, $name, $to_mail, $subj, $msg);

на фрагмент:
if(strlen($msg) < 10000) // 10000 - ограничение размера в байтах
{ $from_mail = htmlspecialchars($from_mail); //  Преобразование 
  $name = htmlspecialchars($name);           //  "подозрительных програмистских символов"
  $msg = htmlspecialchars($msg);             //                        в HTML еквиваленты
  _mail($from_mail, $name, $to_mail, $subj, $msg);
}

На счет $from_mail и $name не уверен, возможно ето излишнее. Тогда сотрете 2 строки с их преобразованием =))

   
 
 автор: glsv (Дизайнер)   (17.01.2005 в 11:27)   письмо автору
 
   для: Виктория   (17.01.2005 в 01:08)
 

Все переменные рекомендуется прогнать через такой блок кода.

<?
$name 
htmlspecialchars(addslashes($name));
$msg htmlspecialchars(addslashes($msg));
?>


А вот так можно проверить корректность ввода обратного e-mail.

if(!preg_match("|[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}|i", $from_mail))
{
  echo "Не верный формат e-mail";
  // Далее можно останавливить скрипт или 
  // снова вывести форму для повтороного заполнения
}

   
Rambler's Top100
вверх

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