|
автор: Виктория (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> | |
|
|
|
|
|
|
|
для: Виктория
(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 строки с их преобразованием =)) | |
|
|
|
|
|
|
|
для: Виктория
(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";
// Далее можно останавливить скрипт или
// снова вывести форму для повтороного заполнения
}
|
| |
|
|
|