| 
Сегодня: 31.10.2025 - 17:43:17
|  | Бесплатные PHP скрипты - форум техподдержки |  | | Форум техподдержки WR-Скриптов на php. Обсуждаем: основы программирования на PHP 5 - 7 версий, различные подходы к написанию скриптов на php 7 без MySQL. А также WR-скрипты: бесплатные доски объявлений, скрипты форумов, Гостевые книги, Каталог ссылок, Галерея, Фотоальбом, Счётчики, Рассылки, Анекдот и другие. Принимаются пожелания для новых версий. Сообщите какой скрипт нужен для Вашего сайта, постараемся найти или реализовать. Скачать скрипты можно бесплатно. Вместе мы сделаем бесплатные php скрипты лучше и доступнее! 
 
 | 
 |  
 Уязвимость CAPTCHA картинки| Объявление - WR-Scriptы в UTF-8 кодировке | 
|---|
 | Активно обновляю скрипты и перевожу их в UTF-8 кодировку. Список перекодированных php скриптов доступен на главной странице сайта. Скачивайте скрипты и устанавливайте на свой сайт! В ближайшее время обновлю каталог знакомств, форум Про, фотоальбом, доски объявлений лайт и ЛЮКС.
 
 На форуме, пожалуйста, пишите что модернизировать в скриптах в первую очередь. Постараюсь исправить большую часть пожеланий!
 Планирую продолжить работы весь 2023 год.
 
 | 
 | Автор | Сообщение | 
|---|
 | 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 секунд защиты от повторной регистрации - чтоб не роняли файл с данными пользователей. |  |  | 
 |  
Купить линзы оптима по супер низкой цене только на Ochkov.net.| Сообщение # 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 |  |  | 
 
 |