Xpoint
   [напомнить пароль]

форма обратной связи с автоответом

Метки: [без меток]
2007-05-11 17:06:11 [обр] Blademen[досье]

Здраствуйте,

Есть простая форма обратной связи.
К примеру: я ввожу в форму данные (First Name, Last Name, E-mail, Text) и на мой email приодит письмо.
Подскажите пожалуйста, как сделать автоответ, то есть, чтобы письмо приходило и на тот емайл который указан в поле E-mail в форме. Автоответ в виде текста (Ваш емаил был получен и будет рассмотренн...)

?php
$to = "test@gmail.com";
$toname = "Support";
$subject = "test";
$confirm = 'ok

if (isset($_POST['sendnow']))
{
$email = $_POST['email'];
$fromname = $_POST['fromname'];
$message = $_POST['message'];

$message=convert_cyr_string($message, "w","k");
$messagewithinfo = "First Name: $fromname\n  Last Name: $lastname\n    E-mail: $email\n       Text: $message\n";
mail($to,$fromname, $messagewithinfo, "From: $fromname <$email>\r\n" . "Reply-To: $email\r\n" . "X-Mailer: PHP/" . phpversion(), $headers);
echo("$confirm");

}
else
{
?>
  Html
<?php
};
?
спустя 1 минуту [обр] hogart(4/5)[досье]
А еще один mail() написать никак? Или я чего-то не понимаю?
спустя 49 минут [обр] Blademen[досье]
ой, стормозил.
Спасибо!
спустя 1 час 2 минуты [обр] Привидение+(611/795)[досье]

Это чудовищное западло.
В первую очередь - самому себе.

Впрочем, и без этого бессмысленного автоответа форма - лакомый кусочек для мэйл-инъекций.

спустя 16 часов [обр] Blademen[досье]
<?php
function heal($str) {
   $injections = array('/(\n+)/i',
   '/(\r+)/i',
   '/(\t+)/i',
   '/(%0A+)/i',
   '/(%0D+)/i',
   '/(%08+)/i',
   '/(%09+)/i'
   );
   $str= preg_replace($injections,'',$str);
   return $str;
}
?>
<?php
function isInjected($str) {
   $injections = array('(\n+)',
   '(\r+)',
   '(\t+)',
   '(%0A+)',
   '(%0D+)',
   '(%08+)',
   '(%09+)'
   );
   $inject = join('|', $injections);
   $inject = "/$inject/i";
   if(preg_match($inject,$str)) {
      return true;
   }
   else {
      return false;
   }
}
?>
спустя 2 часа 2 минуты [обр] Привидение+(611/795)[досье]
Где ты взял эту бяку?
Немедленно выкинь!
И никогда не бери ничего из интернета.
спустя 32 минуты [обр] Привидение+(611/795)[досье]
Мда.
Функции, конечно, не такие вредные, как мне показалось на первый взгляд, но бессмысленного в них очень много. А понимания своих действий вообще нет.
Я вот, не представляю себе, как можно чем-то пользоваться, не понимая, что оно делает.
ведь функция heal сделает все то же самое, но ровно одной строчкой
$str=str_replace(array("\r","\n"),'',$str);
А остальное все - бессмысленный мусор. Нечувствительная к регистру табуляция, замена последовательностей вместо отдельных символов. И самый перл - замена строки %0A и иже с ней. Вот уж кому и чем они могли помешать - загадка.
спустя 1 день 22 часа [обр] Blademen[досье]
Я делаю так, но всеравно мэйл-инъекция проходит.
Что я не так сделал подскажите.
function clean($value, $check = true)
{
 $patterns[0] = '/content-type:/';
 $patterns[1] = '/to:/';
 $patterns[2] = '/cc:/';
 $patterns[3] = '/bcc:/';
 if ($check)
 {
  $patterns[4] = '/\r/';
  $patterns[5] = '/\n/';
  $patterns[6] = '/%0d/';
 }
 return preg_replace($patterns, "", strtolower($value));
}
$name = clean($_POST["name"]);
$email = clean($_POST["email"]);
$message = clean($_POST["message"], false);
спустя 4 часа 41 минуту [обр] Привидение+(611/795)[досье]
Объясни сначала, что ты называешь мэйл-инъекцией.
при отправке какого именно письма она происходит?
как выглядит?
объясни, почему у тебя clean($_POST["name"]); в то время, как $_POST['fromname'];?
спустя 38 минут [обр] Blademen[досье]

Письма приходит в таком виде
uHrfI@mydomain.com
9PNOT@mydomain.com
k671g@mydomain.com
и так далее.. около 50 писем

Содержани письма:
    First Name: 9PNOT@mydomain.com
    E-mail: O8fmXW@mydomain.com
    Message: onehundredmbits@aol.com


во всех письмах присутствует этот email:onehundredmbits@aol.com

Опечатался,

 ...
$fromname = clean($_POST["fromname"]);
$email = clean($_POST["email"]);
$message = clean($_POST["message"], false);
спустя 20 минут [обр] Привидение+(611/795)[досье]

постой.
ты говоришь о содержании писем?
какая же это инъекция?

можешь посмотреть исходный текст письма?
если можешь, то брось его мне в личку.
Я посмотрю и скажу, есть там инъекция, или нету.

инъекция - это когда письмо уходит не токльо тебе, но и еще по куче адресов.

спустя 1 час 23 минуты [обр] Привидение+(611/795)[досье]

ё
исходный. текст. письма.
это. то же. самое. что. и. исходный. текст. веб-страницы.
это совсем не то, что ты видишь на экране.

это то, что тебе приходит в письме.
а не то, что тебе показывает программа.

спустя 1 день 21 час [обр] Привидение+(611/795)[досье]

В общем, настоятельно рекомендую выполнять два простых правила.

  1. все данные, получаемые из формы, вставлять только в тело письма. во всех остальных аргументах mail() использовать только жестко прописанные в скрипте значения.
  2. Отказаться от понтовой фичи с емейлом, сообщающим заполнявшему форму о том, что он её заполнил.

Эти два простых правила гарантируют защиту от инъекций

спустя 1 минуту [обр] Привидение+(611/795)[досье]
+ на время поставить защиту от заполнения формы роботами.
поскольку форма уже в базах, и в нее все равно будут слать ещё некоторое время мусор.
Powered by POEM™ Engine Copyright © 2002-2005