[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Логика captcha
Razzwan
Создаем произвольную captcha-у

1. На сервере генерируем вопрос captha и ответ.
2. Ответ сохраняем на сервере (лучше сохранить в сессии или в бд?)
3. Генерируем на сервере картинку (можно ли это делать на стороне пользователя при помощи canvas, а данные для генерации присылать?)
4. Отправляем картинку пользователю.
5. Получаем от пользователя ответ.
6. Сравниваем с сохраненным
7. Удаляем сохраненный вариант
8. В случае успешной проверки, сохраняем в $_SESSION/$_COOKIES соотв. переменную
9. Отправляем пользователю ответ прошел/не прошел и далее по тексту
10. Profit

Есть ошибки в логике?
Можно ли что-то улучшить/упростить?

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
inpost
1 маленькая подсказка - всё, что хранится на стороне клиента - хранится на стороне клиента. Это значит, что к этим данным есть доступ у роботов.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Zzepish
Razzwan
2. Я в сессиях храню
3. Все генерируем на сервере! на клиенте ничего важного не генерируем
Остальное вроде норм
killer8080
первые четыре пункта объединить в один, строка капчи генерится в момент запроса браузером картинки. По седьмому пункту, удалять хранящийся на сервере ответ нужно сразу после сравнения, вне зависимости от результата, чтобы нельзя было многократно использовать одну и ту же капчу. К урл капчи добавлять случайную строку, или метку времени, чтобы гарантировано пробить кеш.
123456
Цитата
3. Генерируем на сервере картинку (можно ли это делать на стороне пользователя при помощи canvas, а данные для генерации присылать?)

Если делать на стороне клиента, то необходимо клиенту передать ответ для капчи. Т.е. ты автоматически делаешь свою защиту бесполезной.
Razzwan
Цитата (killer8080 @ 26.08.2015 - 15:45)
К урл капчи добавлять случайную строку, или метку времени, чтобы гарантировано пробить кеш.
Что значит "гарантированно пробить кеш"?


_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
Razzwan
Цитата (123456 @ 26.08.2015 - 17:27)
Если делать на стороне клиента, то необходимо клиенту передать ответ для капчи. Т.е. ты автоматически делаешь свою защиту бесполезной.
Ну да, я так и полагал. Думал, может есть какая хитрость?


_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
Razzwan
Можно ли обеспечить бОльшую безопасность, сохраняя ответ в БД? Или это равнозначные варианты?

_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
killer8080
Цитата (Razzwan @ 27.08.2015 - 09:47)
Что значит "гарантированно пробить кеш"?

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



Спустя 4 минуты, 59 секунд killer8080 написал(а):
Цитата (Razzwan @ 27.08.2015 - 09:57)
Можно ли обеспечить бОльшую безопасность, сохраняя ответ в БД? Или это равнозначные варианты?

БД и сессионное хранилище имеют одинаковый уровень доверия, причем сессии возожно даже надежней, для их взлома нужно получить доступ к файловой системе в отличии от бд, где достаточно SQLi уязвимости в скрипте.
Razzwan
killer8080 убийственно отвечаешь. Спасибо. Вроде разобрался вполне однозначно.


_____________
Youtube канал WebDeveloper->Run()
Сайт для души
Gitter
Быстрый ответ:

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