За последние 24 часа нас посетили 22472 программиста и 1145 роботов. Сейчас ищут 687 программистов ...

Реализация капчи

Тема в разделе "Решения, алгоритмы", создана пользователем VLK, 24 ноя 2015.

  1. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Собственно вопрос, как грамотно организовать работу с данными, есть допустим 2 файла:
    img.php - картинка с капчой
    form.php - форма в которой будет:
    Код (PHP):
    1. echo '<img src="img.php" />';
    Мне надо img.php передать код, который должен быть на картинке

    1. просто записать в сессию:
    Код (PHP):
    1. $_SESSION['capcha_code'] = $capcha_code; 
    не прокатит, потому что, а если открываю несколько вкладок, выходит происходит перезапись.
    по этому надо организовывать что бы запись происходила в массив.

    2. записать в массив, как то так:
    Код (PHP):
    1. $_SESSION['capcha_code']['sfdgj'] = $capcha_code; 
    а картинке передать откуда надо взять информацию, что то типа:
    Код (PHP):
    1. echo '<img src="img.php?from=sfdgj" />'; 
    тоже не совсем конает, потому что вредитель может переходить по ссылке img.php?from=sfdgj много раз, ему каждый раз будет выводиться один и тот же код, с разными искажениями и так может быть распознана капча.

    3. ob_start() тоже не катит, помнится я пытался сделать картинку на WP, она почему то делалась с ошибкой, при этом все тоже самое без WP работало.

    4. я тут видел что кто то шифровал md5 и записывал в куки, но это чепуха.

    5. так же как вариант, можно не передавать код, а он будет сам генерироваться в картинке и там же записываться в сессию, опять же возникает вопрос, как будет картинка узнавать длину и словарь.
    А картинке просто передавать передавать куда записывать в сессию, типа:
    Код (PHP):
    1. echo '<img src="img.php?to=sfdgj" />';
    Код (PHP):
    1. $_SESSION['capcha_code'][ $_GET['to'] ] = $capcha_code;
    Кто какие вариант, а точнее алгоритмы может предложить.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    ?to=sfdgj (+ к форме добавить hidden input с этим кодом, ну и смотри ещё в сторону CSRF) может to (случайное число и текст ) выдавать при обновлении страницы + дата когда истекает в сессии (удалять если ввёл правильно), по этому если злоумышленник один раз введёт капчу правильно, ты её из сессии удаляешь, всё, больше ей не воспользуешься.