[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проверьте мой код защиты поля формы плиз!
Хиросим
Доброго дня.
Есть у меня на сайте простая форма для ввода емейла тем, кто хочет получать новости. посетителей мало, пока никто не гадил, но решил всетаки немного обезопасть ее. Вот код:
if (isset($_POST['text_mail']))
{
$ad = $_POST['text_mail'];
$ad = mysql_real_escape_string ($ad);
$sobaka = stripos($ad, "@");
$tochka = stripos($ad, ".");
if ($sobaka !== false && $tochka !== false)
{
if(($aipi = @$_SERVER['HTTP_X_FORWARDED_FOR']) === null)
{$aipi = $_SERVER['REMOTE_ADDR'];}
$num_rows_ad = 1;
if ($aipi !== null)
{$sql = "SELECT * FROM podpiska WHERE other='$aipi'";
$result = mysql_query($sql) or die(mysql_error() .'<br/>'. $sql);
$num_rows_ad = mysql_num_rows($result);}
if ($num_rows_ad < 5)
{
sleep(3);
$dt = date("l dS F Y h:i:s A");
$sql = "INSERT INTO podpiska (adres,data_over,other) VALUES ";
$sql .= "('$ad','$dt','$aipi')";
mysql_query("$sql");}
}
}

Все скромно - экранирую спецсимволы, проверяю наличие в тексте точки и собаки, определяю IP, если определился смотрю сколько в базе записей с таким IP, если меньше 5, то "сплю" 3 секунды на всяк случай и вношу запись в базу.
Понятно, что если IP не определится или придет робот-спамер, генерирующий IP, то защита не прокатит, но капчи ставить не хочу, а других мыслей пока нет.
Вопросы:
1. что еще можно придумать, чтоб не обнаружить очередным утром полтора миллиарда адресов в базе?
2. строчки, определяющие IP я стянул с уроков IRBISa, но не могу найти что значит символ @ в обращении к суперглобальной переменной @$_SERVER?
3. как правильно обнулить/очистить значение гл.массива POST после выполнения скрипта, поскольку, если по каким то причинам обновить страницу, то в базу внесется еще одна запись? можно ли это вообще сделать?



Спустя 52 минуты, 7 секунд (9.09.2010 - 08:18) twin написал(а):
Собачка - это подавление ошибки. Просто короткая запись инициализации.
И еще, не нужно мне приписывать авторство этого:
if(($aipi = @$_SERVER['HTTP_X_FORWARDED_FOR']) === null) 
{$aipi = $_SERVER['REMOTE_ADDR'];}

У меня там так:

   if(($ip = @$_SERVER['HTTP_X_FORWARDED_FOR']) === null) 
$ip = $_SERVER['REMOTE_ADDR'];

Кто такой $aipi?

По коду, не совсем понял, чем так напугали собачки и точки...
на счет блокировки по IP - не самый лучший вариант. Лишние проблемы для юзеров, а боту на это чихать. Да и усыплять скрипт - не идея. Сейчас и многопоточность запросто эмулируется ботами.

Если придумаешь что то действительно стоящее лучше капчи, я первый в очереди.))

Спустя 18 минут, 7 секунд (9.09.2010 - 08:36) Хиросим написал(а):
Цитата
Кто такой $aipi?

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

Ну это типа тупенькой регулярки, поле же для электронного адреса, если атрибуты адреса в наличии - проходи дальше.
Цитата
Если придумаешь что то действительно стоящее лучше капчи

куда мне зеленому....

А по третьему вопросу просветите??


Спустя 4 минуты, 43 секунды (9.09.2010 - 08:41) twin написал(а):
Даже подумать не мог, что так проверяется мыло))))
По третьему вопросу... Ну если ты у меня на сайте рылся, то тут есть.

Спустя 4 минуты, 14 секунд (9.09.2010 - 08:45) Хиросим написал(а):
ага, спасиб...

Спустя 10 дней, 6 часов, 45 минут, 41 секунда (19.09.2010 - 15:31) vitaly777 написал(а):
как новичек спрошу..
а почему
$sobaka = stripos($ad, "@");
$tochka = stripos($ad, ".");

а не regexp ?

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.