Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Много капч на одной странице. 
:(
    Опции темы
Arantir
Дата 19.7.2013, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Почему именно каптча? Защита от роботов? Страница с кучей форм на всеобщем обозрении?

Есть такая штука - токен. Используется, в частности, для предотвращения CSRF.
Делает 3 вещи: гарантирует, что форма отправлена с предыдущим ее получением с сайта (токен генерируется при генерации страницы); что форма отправлена в той же сессии (токен хранится в сессии); что эта же форма не будет обработана второй раз (при получении токена он аннулируется).
В частности, как следствие, при открытии новой вкладки старая вкладка делается невалидной.

Оной способ можно модифицировать:
Генерировать токен только при отсутствии его в сессии.
Хранить токены по именам полей в форме.
Время жизни токена добавить по вкусу.

Получается следующее:
При открытии страницы на каждое скрытое поле с токеном генерируется токен. 
При открытии еще одной вкладки все токены те же самые, взяты из сессии.
При получении формы ее токен аннулируется.
При открытии еще одной вкладки все формы по прежнему валидные, но у ранее отправленных уже новые токены.
Можно открыть столько вкладок, сколько форм и с каждой по очереди отправить каждую следующую форму.
Одну и ту же форму с двух вкладок отправить невозможно (токен для формы только один и он одноразовый).
Милый бонус - формы в чистом виде, без лишний полей в виде каптч.


А для защиты от роботов на всю страницу всучить одну единственную каптчу где-то вверху/внизу и все...

Это сообщение отредактировал(а) Arantir - 19.7.2013, 02:30


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
ksnk
Дата 19.7.2013, 07:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(Arantir @  19.7.2013,  02:29 Найти цитируемый пост)
Почему именно каптча?

Потому, что в техзадании написано - для нерегистрированного юзера, формы защищаются капчей. Не обсуждается и не лечится smile 
Цитата(Arantir @  19.7.2013,  02:29 Найти цитируемый пост)
 Страница с кучей форм на всеобщем обозрении?

Да,  это такой макет. Тоже не лечится. Сам сайт - ненагруженный, нераскручиваемый. По содержанию, периодически устраиваемые узкопрофильные конференции, пара страниц + новости. регистрация участников на очередную конференцию (бывает несколько одновременно) на сайте прямо на главной. 

Это реальный пример из реального проекта. Я понимаю, что можно придумать более удобные средства проверки, но пока рисуются такие макеты - летаем на том, что нарисовали.

Про токен - в теперешней реализации - оказывается он есть у меня.  smile При наличии в сессии фактов: 1- запроса страницы с формой (токен появляется) 2- запроса картинки броузером (слово появляется) форма может проверятся. Если исключить факт ручного ввода юзером капчи - получится токен, практически в чистом виде, разве что привязки немного другие. Надо будет подумать, куда можно пристроить.

Ежели про теорию.
Нормальное, imho, устройство защиты сайта капчей - это капча, появляющаяся раз в 5 минут при очередной отсылке формы с сайта. Формально, каждая форма имеет капчу. Просто при проверке первой формы устанавливается в сессии флажёк - `капчу не проверяем 5 минут`, выставляем куку и с каждой формы сайта по куке скрываем поле с капчей. По истечении времени - показываем (в куке написано время). 



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
ksnk
Дата 25.7.2013, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Воткнул в рабочий проект, полет пока нормальный.

собственно класс

пример использования

Сам проект на github.

Из принципиальных плюсов - картинка не перерисовывается при перерисовке страницы. 

Из тонких моментов 

-- информация о конфигурации капчи хранится в сессии. Это позволяет не подключать окружение сайта при генерации картинки.
-- 2 режима работы файла - поставщик класса в систему и генератор картинки. 
-- использование htaccess обязательно.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sanchezzz
Дата 25.7.2013, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Хотел посмотреть на гите а там фейк)  smile 


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
ksnk
Дата 25.7.2013, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Блин! При входе на гит мне тамошний робот говорит про 
Цитата

Our trusty robot, Hubot, seems to think you are not a human.
Because of that, he's hidden your profile from the public. If you really are human, please contact support to have your profile reinstated.
We promise we won't require DNA proof of your humanity.

Че это он?

Если я захожу с компьютера, с которого не ходил в гугл, то тоже показывает 404 страницу. :( Вступил в переписку с роботом, может что умное расскажет.

Вот, пример использования, раз уж такая пьянка
Код

<?php
/**
 * sample of CAPTCHA usage
 */

// for debugging. Comment this if you really sure
error_reporting(E_ALL);
ini_set('display_errors', 1);

session_start();
/**
 * place pictures just here. no mater the cost
 */
$_SESSION['captcha_setup'] = array(
    'PICTURE_PATH' => __DIR__ . '/',
    'PICTURE_URI' => '/projects/captcha/sample/',
);

include("../captcha.php");

if ($_SERVER['REQUEST_METHOD'] == "POST") {
    if (empty($_POST['handle'])) exit(555);
    $_captcha = new captcha($_POST['handle']);
    if (isset($_POST['reload_captcha_x'])
        || isset($_POST['reload_captcha'])
    ) {
        $_captcha->reset();
    } elseif ($_captcha->is_correct($_POST['captcha'])) {
        echo 'Captcha is correct<br>';
    } else {
        echo 'Incorrect captcha<br>';
    }
}
?>
<style>
    .cimage {
        width: 100px;
        height: 48px;
    }
</style>
<h3>form1</h3>

<?php $_captcha = new captcha('form1'); ?>
<form method="POST" action="">
    <input type="hidden" name="handle" value="form1">
    <label>
        Type the digits
        <input type="text" name="captcha">
    </label>
    <img class="cimage" src="<?= $_captcha->pictureName(true) ?>">
    <input type="submit" value="reload" name="reload_captcha">
    <input type="submit">
</form>

<h3>form2</h3>

<?php $_captcha = new captcha('form2'); ?>
<form method="POST" action="">
    <input type="hidden" name="handle" value="form2">
    <label>
        Type the digits
        <input type="text" name="captcha">
    </label>
    <input type="image" class="cimage" src="<?= $_captcha->pictureName(true) ?>"
           title="Click to reload captcha" name="reload_captcha">
    <input type="submit">
</form>


оно же на тестовом сайте

Это сообщение отредактировал(а) ksnk - 25.7.2013, 14:38


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sanchezzz
Дата 25.7.2013, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Я первый  раз вижу что бы акк блокировали
Ты наверное быстро комиты отправляешь.

Так да, вроде хорошо получилось


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
ksnk
Дата 27.7.2013, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Разблокировали гитхаб. Не прошло и 3х дней. Что было - не объясняют, сорри, типа, ошибочка вышла. Ну да и ладно.

Можно смотреть сам проект, если интересно.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.