Бесплатные PHP скрипты - форум техподдержки

Бесплатные PHP скрипты - форум техподдержки

Форум техподдержки WR-Скриптов на php. Обсуждаем: основы программирования на PHP 5 - 7 версий, различные подходы к написанию скриптов на php 7 без MySQL. А также WR-скрипты: бесплатные доски объявлений, скрипты форумов, Гостевые книги, Каталог ссылок, Галерея, Фотоальбом, Счётчики, Рассылки, Анекдот и другие. Принимаются пожелания для новых версий. Сообщите какой скрипт нужен для Вашего сайта, постараемся найти или реализовать. Скачать скрипты можно бесплатно. Вместе мы сделаем бесплатные php скрипты лучше и доступнее!

Главная сайта бесплатных php скриптовГлавная сайта   ПоискПоиск  
Сегодня: 22.11.2024 - 00:28:23
Страницы:  1  2  3  

Уязвимость CAPTCHA картинки

Объявление - WR-Scriptы в UTF-8 кодировке

Активно обновляю скрипты и перевожу их в UTF-8 кодировку. Список перекодированных php скриптов доступен на главной странице сайта. Скачивайте скрипты и устанавливайте на свой сайт! В ближайшее время обновлю каталог знакомств, форум Про, фотоальбом, доски объявлений лайт и ЛЮКС.

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

Купить линзы оптима по супер низкой цене только на Ochkov.net.
АвторСообщение

shumee

S
Участник форума


Здраствуйте Михаил. Меня зовут Дмитрий Шумеев. Давно слежу за Вашими продвижениями. Очень уважаю то, чем Вы занимаетесь.
Увидев на форуме тему Уязвимости WR-Скриптов захотелось указать на недочёт в этом же самом форуме.
И так....
Идём по ссылке регистрация и сразу же обращаем внимание на CAPTCHA код. Более простого кода я ещё не видел никогда. "Ломаются" ещё более сложные.
Первое, что пришло на ум - посмотреть свойство картинки. Угадай что меня так заинтересовало !?
Строка image= Вставив ссылку в окно браузера я нажал обновить.
Цифры остались те же самые. Это значит, что установлено взаимно однозначное соответствие между множеством цифр и строкой image= . Продолжаем. Теперь после «=» поставим ………. ничего не поставим). Ничего не отобразись. Отлично. Далее смотри на свойство второго символа (цифры) в CAPTCHA.
После image= значение изменилось. После нескольки нажатий "обновить" у меня вышло следующее:

Каждой картинке соответствует своё значение после image=

https://www.wr-script.ru/forum/tools.php?image=2e1b24a664f5e9c18f407b2f9c73e821
https://www.wr-script.ru/forum/tools.php?image=c5bbd980e5ab2c17413ec02bd757a9e5
https://www.wr-script.ru/forum/tools.php?image=86a1793f65


Зная параметры строки image= мы знаем цифры, которые нужно ввести. Т.е. функция CAPTCHA, рассмотренная в данном примере, не удовлетворяет теории Тьюринга (принцип работы инструмента состоит в генерации изображения, содержащего фразу, не упоминаемую ни где на странице в формате, читабельном для компьютера). Т.е. машина может узнать цифры на рисунке.

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

Сообщение # 1 12.10.08 - 20:58:33

Maksir

M
Участник форума

Да уж... Вот я про Тьюринга не читал...
Но, может другой способ регистрации можно придумать?
У меня, например, все данные, которые отсылаюст на мыло, стираются тут же, сразу же после функции отправки, т.е. функция САРТСНА также автоматически в пролёте... :) (так как, никто ничего не видел, когда обновляется страница после регистрации) а картинка остаётся картинкой... Хотя, я и без картинок все сделал.
Хотя, конечно, есть над чем подумать...

Сообщение # 2 12.10.08 - 22:03:28

shumee

S
Участник форума

С регистрацией ИМХО лучшим спосбов защиты является (как сказал Maksir) проверка путём отправки "ключа " на мыло. + временем между последней регистрацией (тоесть после последней можно зарегестрироваться только через (к примеру 5) минут)
Самый верный способ проверки САРТСНА картинки такой:
Формаровать картинку так, чтобы распознавание картинки путем прямого попиксельного сравнения каждого из символов со шрифтом было невозможным.
Ну и передача параметров должна происходить например так...

Файл "картинка" (например image.php)
<pre>
<?
session_start();
...{код}...
$переменная = "код картинки";
$_SESSION['image'] = $переменная;
?></pre>

Форма
<pre>
<?
session_start();
?>
<form action="" method="post">
<p><img src="image.php"></p>
<p><input type="text" name="key"></p>
<p><input type="submit" value=""></p>
</form>
<?php
if(count($_POST)>0){
if(isset($_SESSION['image']) && $_SESSION['image'] == $_POST['key']){
echo "Верно";
}else{
echo "НЕ верно";
}
}
unset($_SESSION['sec_code_session']);
?></pre>

Сообщение # 3 13.10.08 - 00:27:11

WR

W
Участник форума

shumee, Дмитрий, я предусмотрел возможность отследить адрес капчи и сделал защиту от дурака. Везде где есть моя капча - есть эта защита. Пощёлкайте сейчас на ссылки капчи - ничего не отображается.

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

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

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

В одной из версий гостевой встроено 4-е защиты, напомню:
- цифровой антиспам;
- загадки;
- арифметическая операция;
- показ рисунков с цифрами;

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

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

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

Регистрация с форуме и доске уже реализована с ключом. Насчёт времени - идея здравая, реализую в будующих версиях скрипта Добавлю 5-10 секунд защиты от повторной регистрации - чтоб не роняли файл с данными пользователей.

Сообщение # 4 13.10.08 - 05:09:45

Maksir

M
Участник форума

Да, по окончании процедуры не забудьте также ликвидировать переменные содержащие код и сообщение в том числе.
А для против повторной регистрации, можно запамятовать нумер сессии в бан лист. Следующая регистрация возможно только после перезагруза проги с помощью которой была произведена регистрация... :)

Сообщение # 5 13.10.08 - 14:40:51

shumee

S
Участник форума

WR,Михаил, первое что хочу сказать....я уже сделал скрипт распознавания Вашего кода...
Второе, то что вы сделали в панели администратора секретный ключ (участвующий в генерации картинки) это хорошо ! Но как Вы и сказали, это защита от дурака Так вот сейчас я попытаюсь рассказать Вам как "ломают" САРТСНА НЕ дураки

Для начала я расскажу, что вообще такое САРТСНА :) (это если кто не знает, или неправильное представление).
Применяются CAPTCHA для того, чтобы предотвратить множественные автоматические регистрации и отправления сообщений программами-роботами. Т. е. задача CAPTCHA — защита от спама, флуда и захвата аккаунтов.
Чаще всего CAPTCHA выглядит как тем или иным образом зашумленное случайное число, (у Вас,Михаил, она выглядет оч. просто...прим.автора) которую пользователю нужно прочитать и ввести прочитанный результат, хотя существуют и другие алгоритмы.
Основной трюк скрипта - предложить задачу, которую легко смог бы решить человек, но которую невозможно (или крайне трудно) будет решить компьютеру.

Так вот для этого и были придуманы несколько замечательных способов.
Самый распространённый вариант CAPTCHA – требование пользователю ввести символы, изображённые в искажённом виде, часто с добавлением «шума», ну или с эффектами прозрачности, туманности изображения. Для людей с нарушением зрения, применяются CAPTCHA, основанные на распознавании речи. Значительно реже могут применяться другие способы – в основном плохо алгоритмизуемые: узнать, что или кто находится на картинке, отметить все картинки с собаками или ответить на простой вопрос: «висит груша, нельзя скушать» (к примеру).

Сейчас без труда можно найти программы и скрипты, а так же плагины для распознавания капчи.
Точность будет достаточно большой при «слабой CAPTCHA».
В число «слабостей» входит:
1. фиксированный шрифт
2. фиксированное положение символов
3. отсутствие искажений
4. отделение символов от фона с использованием цветового ключа
5. отсутствие размытия по Гауссу
6. лёгкое отделение символов друг от друга
7. и другие…

Как описано в одном из прочтённых мной постов пойдем от простого к сложному - как сравнить две однопиксельные картинки ? Допустим чёрная - единичка, белая - нуль. Правильно: оцифровываем и вычитаем, т.е. преобразовали картинку в циферку $in - если (1-$in)==0 имеем чёрную картинку т.е. единичку.
Распознавание делится на 2 основным этапа:
Определение местоположения и границ каждого символа.
Собственно распознавание символа.
В твом случае нужно только сравнивать подготовленные массивы с эталонными массивами и выбирать тот где расхождение минимально.

Встречаются CAPTCHA, где предлагается ввести ответ на простое арифметическое действие: «2Х2» или необходимо написать цифрами то, что написано на картинке буквами: «двести двадцать пять». Но этот вариант легко "ломаем". Вот вам Михаил и "арифметическая операция"

По поводу "легкочитаемость Вашего кода" могу сказать только одно.... его так же легко может прочесть и компьютер.
В случае с Вашей CAPTCHA могу посоветовать сделать следущее:

Передачу параметров передавать только в сессиях !

Самое главное не сделать распространенную ошибку. При проверке правильности введенного текста его просто берут из сессии и сравнивают с ответом посетителя. Проблема в том, что злоумышленник может подсунуть нам номер несуществующей сессии и ввести пустой проверочный текст. И этот пустой текст будет равен пустому тексту из несуществующей сессии — все, заслон пройден.
Важно очищать сессию после каждой проверки (неважно, успешной или нет). Не стоит полагаться на то, что при обновлении страницы скрипт картинки сгенерит новый текст — бот может просто не запрашивать картинку, а вводить один и тот же ответ, который в самом начале прочитал и сообщил боту сам злоумышленник.

И Делать Волновое искажение по оси x и у !


Вот и всё.

Сообщение # 6 13.10.08 - 17:05:50

Maksir

M
Участник форума

shumee, а че сессии сразу резать? сессию можно же использовать и во благо. :)
зарегить сессию заргестрировавшегося и посылать его в баню, если он повторно полезет в регистрацию. На любой клиент стартуется сессия. Сессия, это, практически, ID процесса. По такому же принципу, как в Unix системах. Можно также всё организовать :)

Сообщение # 7 13.10.08 - 23:09:28

shumee

S
Участник форума

Maksir, я думаю Вам внимательней надо бы прочитать вышенаписанный пост, и посмотреть вот на этот скрипт проверки.

<?php
session_start();
?>
<form action="" method="post">
<p><img src="image.php"></p>
<p><input type="text" name="keyimage"></p>
<p><input type="submit" value="Проверить"></p>
</form>
<?php
if(count($_POST)>0){
if(isset($_SESSION['image_session']) && $_SESSION['image_session'] == $_POST['keyimage']){
echo "Верно";
}else{
echo "НЕ верно";
}
}
unset($_SESSION['image_session']);
?>

Что будет если мы не убьём сессию !?

Насчёт "зарегить сессию заргестрировавшегося и посылать его в баню, если он повторно полезет в регистрацию." сомневаюсь. делаем такого бота (конечно не без испозования языка C ) чтобы он после каждой регистрации создавал новую сессию (работая под Unix открывал как бы браузер заново) и вуаля. регистрация снова доступна. Хотя этого я не реализовывал. Это всего лишь мои предположения.

Сообщение # 8 14.10.08 - 00:35:42

WR

W
Участник форума

shumee, оказывается целая система для защитного кода есть...
Буду знать Сиба за инфу. Насчёт проверку пустого запроса - надо бы и мне проверить свой код - вдруг можно по несуществующему числу пройти...

С сессиями пока не разбирался, у меня же всё на куках

Сообщение # 9 14.10.08 - 04:15:46

Maksir

M
Участник форума

shumee, думаю это Вы меня неправильно поняли...
У сессии на хосте есть уникальный SID номер. Читайте документацию по конфигурированию серверов, тогда может и другие что говорят понимать научитесь.
По какому принцыпу сервер отдаёт запросы клиентам(?) :)

Сообщение # 10 14.10.08 - 14:39:29

Maksir

M
Участник форума


Цитата:


unset($_SESSION['image_session']);
Что будет если мы не убьём сессию !?

Это не сессия...

Сообщение # 11 15.10.08 - 12:54:47

shumee

S
Участник форума

Примногоуважаемый Maksir Я прекрастно знаю что такое сессия и принцып её работы. И прекрастно понял Вас. Не считаю нужным опысывать в этой статье принципы её работы.
Документацию по работе сессий скорее всего надобы прочитать Вам


Цитата:


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



$_SESSION - Массив
['image_session'] - Индекс массива.
unset($_SESSION['image_session']); Уж очень интересно что это по Вашему ? (Не поленитесь сказать "Вашими словами")


Ну и наконец самое главное..... В этой статье я пытался описать уязвимость CAPTCHA картинки. А конкретнее о способе попиксильного определения.
А то тут получается как в одной интерсной шутке..... Человеку сказали написать сочинение Он не знал что придумать..И вот он начал писать:
"Сегодня я пришёл домой рано.(точка) Кстати о точке..... Первый знак пунктуации был изобретен Аристотелем т.д. "
Вот так и Вы. Тут про одно, а Вы про другое.

Так что насчёт серверов и их настройки мы с Вами можем поговорить в другом месте 5 лет "использования" Slackware не проходят Спасибо за понимание.

Сообщение # 12 15.10.08 - 18:42:21
Как сделать чтобы голование с куками работало? :Предыдущая темаСледующая тема: Гостевая книга XXS
Страницы:  1  2  3  

Сообщение
Имя E-mail
Сообщение

Нажмите на точку возле имени для обращения к участнику

Смайлы:

Ещё смайлы
Эмодзи
         
Защитный код: (введите цифры, которые на синем фоне)
Ответ на вопрос: (Какой сейчас год?)
   
WR-Счётчик
Powered by WR-Forum Professional © 2.3 UTF-8 beta версия