Меню
- Главная
- Скрипты
- Шаблоны сайта
- Книги
- Фон для сайта
- Анимированные картинки
- Партнерские программы
- Лохотроны и кидалово в интернете
- Статьи

Реклама



Контакты
Будем очень признательны если вы пришлёте свои скрипты, шаблоны, статьи и многое другое, что может понадобиться для создания сайта. admin@webmas.ru
При перепечатке материалов ссылка на www.webmas.ru обязательна.


 
Защита от автоматической регистрации при помощи картинки.

Защита от автоматической регистрации при помощи картинки.


В последнее время в Интернете все чаще можно встретить разнообразных спам-ботов, которые не только автоматически регистрируются, но и добавляют спам-сообщения на форумах, в комментариях и т.п.

Действия ботов могут так же привести к более серьезным последствиям. Представьте что у вас есть форма, которая заносит данные в базу данных после ее отправки, и что может произойти, если в одно мгновение форму автоматически заполнят и отправят тысячи и десятки тысяч роботов.

Очень часто возникает необходимость защиты от таких ботов. Как правило, в основном защита организуется в виде какого то дополнительно параметра, который должен быть введен в одно из полей формы, и который бот никак не сможет определить. Это реализуется при помощи картинки с буквами или цифрами (или и тем и другим одновременно) через сессии или через ip посетителей. В данной статье я помогу вам разобраться как сделать такую картинку при помощи php и mysql в считанные минуты.

Для начала создадим небольшую таблицу базы данных, в которой будут временно храниться ip посетителей и значения цифр, изображенных на картинке:


CREATE TABLE test (
IP char(15) NOT NULL,
Number char(3),
PRIMARY KEY(IP))


Тип поля Number указывает, что у нас будут выводится по три цифры на каждой картинке.

Пусть у нас есть некая форма, корорая отправляет данные странице ok.php. Часть кода страницы, на которой расположенна форма будет выглядить следующим образом.

Код файла index.php:


<form action=ok.php method=post>
Имя: <input type=text><br>
Текст: <input type=text><br>
Введите цифры на картинке: <input type=text size=3 name=intext>

<?
php
$ip
= $_SERVER['REMOTE_ADDR'];
for (
$i=0; $i<3; $i++) $x=$x.mt_rand(1,9);
echo
"<img src=pic.php?text=".$x.">";
@
mysql_connect('localhost', 'login', 'pass') or die;
@
mysql_select_db('dbname') or die("Не удалось соединится с базой данных");
mysql_query("INSERT INTO test VALUES('".$ip."', '".$x."')");
?>
<input type=submit>
</form>


На форме расположенны два поля для ввода данных (Имя и Текст) и поле для ввода значения цифр с картинки (которое имеет имя intext)


$ip = $_SERVER['REMOTE_ADDR'];


Определяем ip посетителя страницы.


for ($i=0; $i<3; $i++) $x=$x.mt_rand(1,9);


При помощи функции mt_rand формируем три случайных числа от 1 до 9 и представляем их в виде строки $x.


echo "<img src=pic.php?text=".$x.">";


Ключевая строка. Выводим собственно картинку цифрами. Код файла pic.php описан ниже.


@mysql_connect('localhost', 'login', 'pass') or die("Не удалось соединится с хостом базы данных");
@
mysql_select_db('dbname') or die("Не удалось соединится с базой данных");
mysql_query("INSERT INTO test VALUES('".$ip."', '".$x."')");


Соединяемся с базой данных и записываем ip и строку с цифрами в таблицу test.


<input type=submit>
</
form>


Рисуем кнопку отправки данных и закрываем форму :)

Код файла pic.php:


<?php
Header
("Content-type: image/gif");
$rgb=0x1e81de;
$idest = imagecreatetruecolor(39, 20);
$textcolor = imagecolorallocate($idest, 255,255,255);
imagefill($idest, 0, 0, $rgb);
imagestring($idest, 3, 9, 4, $text, $textcolor);
imagegif($idest);
imagedestroy($idest);
?>


Из того, что вы должны знать в этом коде: $rgb - цвет фона картинки, $textcolor - цвет цифр, выводимых на картинке. Как вы заметили, формироваться будет изображение в формате GIF.

Теперь осталось последнее, обработка данных полученных в форме в файле ok.php (куда эти данные собственно и передаются).

Код файла ok.php:


<?php
$ip
= $_SERVER['REMOTE_ADDR'];
@
mysql_connect('localhost', 'login', 'pass') or die;
@
mysql_select_db('work2') or die;
$res = mysql_query("SELECT number FROM test WHERE IP='".$ip."'");

if (
mysql_num_rows($res)==0) echo "Вы не ввели цифры!";
else
{
if (
mysql_result($res,0,0)!=$intext) echo "Вы ввели не правильные цифры";
else echo
"ВСЕ ОК :)";
mysql_query("DELETE FROM test WHERE IP='".$ip."'");
};
?>


Опять же, определяем ip пользователя и сравниваем, записан ли такой адрес в таблицу test. Если да, проверяем:


mysql_result($res,0,0)!=$intext


те ли цифры пользователь ввел в форму в текстовое поле intext, которые были отображены на картинке и записаны возле его ip адреса в базе данных. Вот и все :)

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

Назад
Автор: нет данных
Источник: art.webobzor.net



 
Реклама
интернет магазин алкогольные напитки в хабаровске
- Купить оптом Цветы.

Реклама


Рейтинги

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