![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Хочу сделать на сайте защиту от спама, путем ввода "кода подтверждения". Как генерировать картинку я нашел в интернете неплохой способ и с этим проблем нету.. Проблема в другом.. там предлагают хранить строку с кодом в БД.. Я хотел бы узнать на сколько хорош этот способ? Может есть какие-то получше способы? Я сначала подумал о хранении в виде md5 в скрытом поле формы, а потом переводить в md5 строку которую введет пользователь и их сравнивать на равенство.. А потом понял, что путем замены в этом скрытом поле строки можно все это дело обойти..
Если хранить в БД, в каком-то определенном поле, то тут может получиться так: откроет пользователь страницу в двух окнах браузера и тогда при открытии последней странички код от первой страницы затрется на код от второй.. тоже не есть гуд.. нужно чтобы так тоже работало.. т.к. он может так добавлять разную информацию в разные места.. можно же не md5 шифровать а как-нибудь по своему.. Один раз записать тот сгенерированный хеш из скрытого поля и строку из картинки.. а потом бот будет постоянно их использовать и вся защита превращается в ничто.. |
|||
|
||||
| Blaga |
|
|||
![]() ЛамМер++ ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 15.11.2005 Где: г. Иркутск Репутация: 2 Всего: 4 |
Я не спец в этом деле но в таком случае обычно используют сессии... Как точно я не знаю но думаю просто заводят сессию а в ней переменная с этим кодом. А потом сравнивают...
-------------------- |
|||
|
||||
| Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 20 Всего: 42 |
Да, я тоже рекомендую хранить строку в сессии пользователя. И не забывать удалять ее из сессии вовремя, не допуская повторного использования. Решение с базой данных - медленнее и тяжеловеснее
-------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
|||
|
||||
| kshyms |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 303 Регистрация: 30.8.2006 Где: Душанбе Репутация: нет Всего: 0 |
А к чему защита от спама, если у вас на почте есть автоответчик. Имхо. Пишут вам пишите и вы . На их рекламу есть ваша реклама. Если у вас есть почта и вам присылают письма на сайт значит уже клики идут и в хоть кому то нужны. Например в гостевую на сайте народ роботы высылают письма и в гугле сайт вверх идет по рейтингу.
|
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 8 Всего: 89 |
Рекомендую использовать сессии! Если пользоваться сессиями, то можно даже сделать фишку "обновить" рисунок (если неудается прочитать код с него). Сессии проще, легче и практичнее. Только тут главное сессию не кукой проверять, а как-то по другому передавать ее ид серверу.
-------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 20 Всего: 42 |
Это почему еще? Если перехватят, то перехватят только идентификатор, а не смысловые значения, которые хранятся на сервере. Если подменят на несущетвующую - еу так проверяйте, что сессия сущетвует, что она не пустая - и все. В любом случае идентификатор сессии придется передавать каким-то открытым способом. COOKIE - нормальный вариант. Да и не так уж много у Вас вариантов: COOKIE, GET и POST , -------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
|||
|
||||
| Sunvas |
|
|||
|
Соль и сахар ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3388 Регистрация: 12.3.2006 Где: Тосно Репутация: 8 Всего: 89 |
Не знаю. Возможно, это мое личное отвращение, но по-моиму проверять капчу, используя куку несколько бредово. По-моиму POST самое "то" для этого. -------------------- Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их. |
|||
|
||||
| dimash1987 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 5.3.2007 Репутация: нет Всего: нет |
Избитая тема. СОздаешь сессию, закидываешь туда значение по rand(1000,900000) и показываешь человеку, человек если правильно не вводит, генерируется другое значение сесийной переменной. Все. Других вариантов нормальных просто нету.
И кто вообще тут сказал юзать Кукисы? Надо юзать обычную сессию, это если хотите дань уважению юзеру ) Это сообщение отредактировал(а) PARROT - 20.1.2008, 23:30 |
|||
|
||||
| Golda |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 26.3.2007 Где: Ариель, Израиль Репутация: 20 Всего: 42 |
dimash1987, речь и шла о использовании сессии. Вопрос был о том, как передавать на сервер идентификатор сессии: стандартным образом (тогда чаще всего он будет передан через куки) или выстроить приложение так, чтобы он передавался через POST. По большому счету, разницы нет. POST-переменные подделываются ничуть не хуже COOKIES. И точно также при правильной работе с сессией это не поможет пройти CAPTCHA
-------------------- "For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics |
|||
|
||||
| Smith |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 17.1.2007 Репутация: 1 Всего: 2 |
|
|||
|
||||
| vpk1961 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 13.2.2006 Репутация: нет Всего: нет |
на сайтах www.kcaptcha.ru, www.kruglov.ru
был хороший проект по этому вопросу, но увы, сейчас они недоступны. Если нужно, то могу выслать его скрипты. Там в сессиях все хорошо работает. Давно пользую icq 450179186 [email protected] |
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
Smith, вообще-то, у этого сайта адрес www.captcha.ru и он прекрасно доступен.
kshyms, во-первых, судя по всему, речь идет не о почтовом спаме, о роботах, заполняющих формы. во-вторых, по какому адресу писать рекламу в ответ? по адресу отправителя емейла?! И что за странный список по ссылке? Sunvas, Кто говорит о проверке капчи с помощью куки? Речь идет о передаче идентификатора сессии с помощью куки. против этого у тебя есть аргументы? |
|||
|
||||
| MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
Dmitry_177 если тебе нужна только капчатка то в разделе PHP: Графика много раз рассматривался ее пример.
-------------------- Amazing |
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
MoLeX, прочти первую строчку исходного сообщения темы.
|
|||
|
||||
| MoLeX |
|
|||
![]() Местный пингвин ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 4076 Регистрация: 17.5.2007 Репутация: 46 Всего: 140 |
GeneralElectric имеется разногласия в название темы и ее проблемы. защита от спама представляет собой не только капчатку но и другие методы на которые способен человеческий мозг.
Добавлено через 27 секунд не беспокойся первую строчку я прочитал, так же как и вторую и третью и т.д. -------------------- Amazing |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Решил хранить в сессии.. но тут я столкнулся с другой проблемой.. т.к. у меня картинка генерируется скриптом, то в теге <img> в src я прописал путь к скрипту, который генерирует сам код и потом выдает картинку.. так вот после генерации кода я записываю его в переменную, которая хранится в сессии.. и почему-то в главном скрипте, т.е. в котором генерируется сама форма и присутствует все тот же <img> эта переменная пустая..
|
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
А откуда он там возьмётся-то? А, главное - зачем он там нужен?
Разве код тебе нужен при генерации формы, а не при её проверке? |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
у меня все в одном файле сделано.. генерится форма скриптом, а потом значения из нее передаются в этот же скрипт.. Это сообщение отредактировал(а) Dmitry_177 - 22.1.2008, 01:03 |
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
Неважно, сколько файлов. разницы никакой - один файл или 10.
Зачем тебе нужен код при генерации формы? |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
при генерации да.. не нужен.. а при проверке нужен.. |
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
При проверке он есть? Как проверяешь? Сессию стартуешь? Совпадает ли идентификатор? Для надежности, чтобы не полагаться на куки, можно сессию стартовать и при генерации формы, а идентификатор передать в картинку GET-ом, а в проверку - hidden полем.
Тогда все должно работать 100% Вообще, если проблемы с сессией, то читай тут: PHP FAQ: Сессии. Возможные проблемы и их устранение. |
|||
|
||||
| Dmitry_177 |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
в этом то весь и косяк что нету.. выводил на экран - пусто..
ну как.. оператором сравнения..
идентификатор не пробовал.. незнаю как это сделать.. но я и в основном скрипте и в скрипте генерации картинки стартую сессию и регистрирую переменную.. |
||||||
|
|||||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
Не надо ничего регистрировать.
прочитай по ссылке, как работать с сессиями. потом напиши тестовый скрипт, а точнее - два, где значение из одного в другой передаетя сессией. потом, когда все заработает - переноси в свой скрипт. |
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
1. при генерации формы, до всего вывода
session_start(); к картинке обращаешься, как <img src=captcha.php?<? echo session_name().'='.session_id()?>> в форму добавляешь поле <input type="hidden" name="<? echo session_name()?>" value="<? echo session_id()?>"> 2. в скрипте картинки пишешь session_start(); $_SESSION['captchacode']=$code; 3. в скрипте проверки пишешь session_start(); $code=$_SESSION['captchacode']; 4. всё. Это сообщение отредактировал(а) GeneralElectric - 22.1.2008, 09:12 |
|||
|
||||
| Dmitry_177 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
Как я делал тоже заработало.. я всеголишь $HTTP_SESSION_VARS заменил на $_SESSION и все..
не пойму.. почему ненадо? $_SESSION['captchacode'] ненадо разве регистрировать так:
??? |
||||
|
|||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
НЕТ
|
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
ок, у меня тогда еще один вопрос созрел.. а идентификатор сессии сам автоматически индивидуальный для каждого пользователя создается? что бы не получилось неожиданного перехлеста..
|
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
не получится
|
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
а зачем мы "вручную" дописываем имя сессии к ссылке, если можно session.use_trans_sid=1 поставить? и это будет автоматически тогда дописываться..
|
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
Ну и нафига тебе эта борода на ВСЕХ сылках на странице?
|
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
ну и ладно.. или в этом есть какой-то минус? |
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
А как сделать обновление картинки, в случае если код не удается прочитать?
|
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
F5
|
|||
|
||||
| Dmitry_177 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 22.9.2006 Репутация: нет Всего: нет |
хм.. ну это обновление всей страницы.. а хотелось бы чтобы обновлялась только картинка по нажатию на "обновить картинку"
|
|||
|
||||
| GeneralElectric |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 797 Регистрация: 11.1.2008 Репутация: 13 Всего: 16 |
Обратись в форум по Яваскрипту вопросом как обновить картинку.
|
|||
|
||||
| flashaa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 796 Регистрация: 7.3.2006 Репутация: 19 Всего: 25 |
Если у вас защита от спама среди зарегистрированных пользователей, т.е. вы можете отличить пользователей сайта точно, то вам всего навсего нужно при обработке какого-либо действия пользователя определить, не выполнял ли пользователь это действие недавно (в какой-то интервал времени). Если пользователи никак не фильтруются, то тогда, считаю лучше воспользоваться следующими способами вместо капчи(капчу вообще не люблю): 1) Вопрос-ответ. Пользователю предъявляется один случайный вопрос (из некоторого списка), требуется ввести ответ. К примеру "сколько будет 2х2 ?". Отвечать на такие вопросы намного приятнее , чем вводить коды, да и не надо рендерить картинку - меньше нагрузки на сервер. 2) Подгрузка формы яваскриптом. Как известно, спам - это боты, т.е. просто программы, которые скачивают содержимое страницы и пытаются, разбираясь в нем в силу своего не очень умного алгоритма, искать формы и добавлять свою пакостную рекламу. Врядли кто-то из них будет обрабатывать яваскрипты. Соответственно если вы сделаете неполноценную форму (к примеру будете ко всем формам добавлять скрытое поле, значение которого равно session_id), а в обработчике форм(PHP-скрипте), будете требовать это поле, то боты, не обработав яваскрипт, вам отправят необработанную форму и такие запросы вы можете игнорировать. |
|||
|
||||
| kshyms |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 303 Регистрация: 30.8.2006 Где: Душанбе Репутация: нет Всего: 0 |
GeneralElectric,
|
|||
|
||||
| KonstRuctor |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 245 Регистрация: 31.3.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: нет |
У меня есть неплохой класс КАПЧИ.
Он разработан на основе класса, взятого с phpclasses.org Он просто устанавливается, легко настраивается. Если тема еще актуальна сообщи. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |