запрет СПАМа через mail injecting

zakon

Новичок
запрет СПАМа через mail injecting

Через одну из форм обратной связи производится рассылка спама.
Путем анализа логов удалось найти дырявую форму, а точнее php-функцию.
Просмотрев все результаты поиска по www.phpclub.ru (поиск: "mail inject"), проблему решить
не удалось, т.к. там вопрос решается спорно и вообще решается ли...
Взгляните, пожалуйста, на скрипт валидации адреса и если видны очевидные
баги, то дайте рекомендации.

PHP:
if (eregi("^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$", $customer_email) &&
preg_match("(\n|\r)",$customer_email))
Может нужно проверять не только поле обратного адреса, но и остальные?
Скорее всего спамеры подставляют в одно из полей форы что-то вроде:
PHP:
"TO:mail1\nCC:mail2,mail3"
Как четко проверить наличие знаков переноса строки в переменной?
 

tf

крылья рулят
Как четко проверить наличие знаков переноса строки в переменной?
неа, как тебе правильно формировать данные для отсылаемой функции почты?
 

Фанат

oncle terrible
Команда форума
.к. там вопрос решается спорно и вообще решается ли...
тоже мне - нашёл вселенскую проблему нерешаемую.
Скорее всего спамеры подставляют в одно из полей форы
кто мешает тебе записать в файл и посмотреть самому - что и в какое?
Как четко проверить наличие знаков переноса строки в переменной?
Ну нельзя же настолько сомневаться в себе...
у тебя есть какие-то сомнения? какие конкретно?
 

zakon

Новичок
Чтобы записать в файл и посмотреть нужно еще раз ключить этот кривой скрипт, а за спам хостер отключает аккаунт магазину (вернее отправку почты). Нет такой возможности оставить магазин в простой еще раз.

Сомнения:
- как может происходить рассылка на несколько адресов(что они там подставляют) и как этого избежать
 

DvR

Новичок
Странный ты человек!

Если это форма ОБРАТНОЙ связи, значит поле to: заполняешь ты сам. так?

Экспериментировать боишься, потому что не хочешь еще раз лажануться.

Фанат предложил тебе 100% безопасный вариант. Пиши все из формы обратной связи в файл.

Потом руками смотри что там внутри.

Важно - отправлять письмо в этом случае не обязательно. А значит никто тебе ничто не заблокирует.
 

zakon

Новичок
Попробую записывать в файл. Как будут данные, вернусь и выложу.
 

WP

^_^
Угу очень странный.
PHP:
function get_first_line($string)
{
 if (($a = strpos($string,"\n")) !== FALSE) {$string = substr($string,0,$a);}
 if (($a = strpos($string,"\r")) !== FALSE) {$string = substr($string,0,$a);}
 return $string;
}
Вот тебе 100% безопасный вариант.
Регулярки нужны только там где они нужны.

-~{}~ 06.01.07 18:55:

PHP:
echo addcslashes('spammers
must
die',"\r\n");
// spammers\r\nmust\r\ndir
Аналогично.
 

DvR

Новичок
Автор оригинала: zakon
Попробую записывать в файл. Как будут данные, вернусь и выложу.
не правильно.

правильно вот:
"Как будут данные - посмотрю, подумаю, попробую решить. Если не выйдет - вернусь и выложу"
 

С.

Продвинутый новичок
WP,
PHP:
 if (($a = strpos($string,"\n")) !== FALSE) exit;
Если есть "\n", то уже ничего никуда отправлять не надо.
 

zakon

Новичок
Поставил запись из формы в базу. Если пользователь шлет, то все нормально пишется в БД. А спам попер опять, и в базе не регистрируется.
Могут ли как-то данные $_POST[""] вообще подменить?
 

WP

^_^
Кривые руки. А ты уверен что спам через этот скрипт?
 

zakon

Новичок
Можно сказать на 99%.
Если сравнивать время отправки писем и время из логов сайта, то как раз совпадает с обращением к этому скрипту, а точнее к форме, причем столько раз сколько писем отправлено.

- спасибо за критику :)
 

zakon

Новичок
Подменить -- скажем в GET мы можем через строку адреса, а в POST могут как-то?

В форме есть несколько hidden полей.
 

WP

^_^
zakon
Значит кривые руки. Кинь код куда-нибудь, а мы посмотрим. А то это затянется надолго.
_POST берется из запроса, и его "подменить" элементарно. Собственно подменять даже ничего не надо, просто шлешь что хочешь. А вообще можешь использовать класс для отправки почты, в большинстве реализация эта проблема уже устранена.
 

Фанат

oncle terrible
Команда форума
zakon
как интересно.
а что же в этих hidden полях передаётся?
адрес, наверное, куда послать письмо?
 

zakon

Новичок
PHP:
                                    <a name="inquiry"></a>
				
				<form name="form1" method="post" action="index.php#inquiry">
				{$smarty.const.FEEDBACK_CUSTOMER_NAME}:<br>
				<input name="customer_name" type="text" size="40" value="{$customer_name|replace:"\"":"&quot;"}"><br>

				{$smarty.const.CUSTOMER_EMAIL}<br>
				<input name="customer_email" type="text" size="40" value="{$customer_email|replace:"\"":"&quot;"}">

				<p>
				<input name="message_subject" type="hidden" size="50" value="{$product_info.name|replace:"\"":"&quot;"}">

				<p>{$smarty.const.STRING_FEEDBACK_PRODUCT_INQUIRY_EXPLANATION} {$product_info.name}:<br>
				<textarea name="message_text" cols="50" rows="10">{$message_text|replace:"<":"&lt;"}</textarea>

				<p>
				<input type="submit" value="OK">
				<input type="hidden" name="request_information" value="yes">
				<input type="hidden" name="productID" value="{$product_info.productID}">
				</p>

				</form>
 

Фанат

oncle terrible
Команда форума
zakon
это не форма.
это код на языке смарти.
а тебя просили форму.

ты не можешь ДАЖЕ отличить HTML от Смарти? Это очень печально

-~{}~ 07.01.07 12:57:

И ты не пояснил - что ты называешь подменой, и почему она тебя беспокоит
 

zakon

Новичок
Ок, сейчас дам ХТМЛ

-~{}~ 07.01.07 13:10:

PHP:
                                    <h4>Есть вопросы по BBK EP-5105S?</h4>

				<font class=faq>Вы можете задать нам вопрос(ы) с помощью следующей формы.</font>

				<a name="inquiry"></a>
				<p>
				
				<form name="form1" method="post" action="index.php#inquiry">
				Ваше имя:<br>
				<input name="customer_name" type="text" size="40" value=""><br>

				E-mail:<br>
				<input name="customer_email" type="text" size="40" value="">

				<p>
				<input name="message_subject" type="hidden" size="50" value="BBK EP-5105S">

				<p>Пожалуйста, сформулируйте Ваши вопросы относительно  BBK EP-5105S:<br>
				<textarea name="message_text" cols="50" rows="10"></textarea>

				<p>
				<input type="submit" value="OK">
				<input type="hidden" name="request_information" value="yes">
				<input type="hidden" name="productID" value="2899">
				</p>

				</form>
 
Сверху