|
Бесплатные PHP скрипты - форум техподдержки |
Форум техподдержки WR-Скриптов на php. Обсуждаем: основы программирования на PHP 5 - 7 версий, различные подходы к написанию скриптов на php 7 без MySQL. А также WR-скрипты: бесплатные доски объявлений, скрипты форумов, Гостевые книги, Каталог ссылок, Галерея, Фотоальбом, Счётчики, Рассылки, Анекдот и другие. Принимаются пожелания для новых версий. Сообщите какой скрипт нужен для Вашего сайта, постараемся найти или реализовать. Скачать скрипты можно бесплатно. Вместе мы сделаем бесплатные php скрипты лучше и доступнее!
|
| Сегодня: 22.11.2024 - 00:28:23 Уязвимость 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 секунд защиты от повторной регистрации - чтоб не роняли файл с данными пользователей. | |
|
Сообщение # 4 |
13.10.08 - 05:09:45
|
Купить линзы оптима по супер низкой цене только на Ochkov.net. | 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
| |
|