Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Кто хочет побряцать мускулами? Сайт для битья.
 
 автор: DJ Paltus   (27.06.2005 в 11:12)   письмо автору
 
 

Я полазил, почитал тут вокруг, и думаю предложить кому интересно, крякнуть мой сайт (вернее, его часть).
Не столько для того, чтобы самоутвердиться (я не питаю никаких иллюзий по поводу своих талантов как программиста), а чтобы увидеть воочию, насколько это действенно.
http://chgk.d-source.com.ru/play/antirasslabon.php
Здесь находится несложная игруша, вроде викторины.
Ну, а в плане задания могу предложить грохнуть файл с базой пользователей.
Контент сохранен локально, можно не беспокоиться, если пострадает какая-либо еще часть сайта.
Чтобы доказать то, что сайт именно мой и я полностью отвечаю за последствия, я размещу на входной страничке строку
Сайт проходит крэш-тест, поэтому допускается временная неработоспособность отдельных разделов.

   
 
 автор: TrunK   (27.06.2005 в 11:18)   письмо автору
 
   для: DJ Paltus   (27.06.2005 в 11:12)
 

Я тоже не питаю иллюзий по поводу своих талантов программиста, но всё же попробую.

   
 
 автор: DJ Paltus   (27.06.2005 в 11:24)   письмо автору
 
   для: TrunK   (27.06.2005 в 11:18)
 

Если не трудно, опишите потом, плиз, что Вы делали, как и сколько раз. Вне зависимости от результата.

   
 
 автор: cheops   (27.06.2005 в 11:56)   письмо автору
 
   для: DJ Paltus   (27.06.2005 в 11:12)
 

Без кодов ломать сложно... вы бы хоть кусочек привели где происходит сравнение ответа с оригиналом, а то я может зря выдумываю вставки
' || 1=1 || '
" || 1=1 || "

Ведь нам не известно даже база данных у вас или файлы...

   
 
 автор: DJ Paltus   (27.06.2005 в 12:04)   письмо автору
 
   для: cheops   (27.06.2005 в 11:56)
 

А, докидываю.
У меня MySQL не используется, данные о пользователе хранятся в файле в виде сериализованного массива, пароли зашифрованы в md5 и там же, проверка имени пользователя идет после загрузки и десериализации массива из файла примерно следующим образом:

if(isset($username)){}

То есть, в файле массив массивов, элементами которого является usename со всеми параметрами "в себе" - пароль, счет.
Но как Вам удалось зарегистрировать игрока с пустым именем!?
Проверка имени происходит так:

if(ereg("[^0-9a-zA-Z_\-]+", $username)){$baduser=1; $msg="сообщение";}
if((empty($username))or(empty($password))){$baduser=1; $msg="опять сообещение";}

   
 
 автор: cheops   (27.06.2005 в 12:09)   письмо автору
 
   для: DJ Paltus   (27.06.2005 в 12:04)
 

Больше интереснее как происходит проверка ответа... часто люди просто хотят накрутить свой рейтинг. Я туда и подставлял вставки.

   
 
 автор: DJ Paltus   (27.06.2005 в 12:17)   письмо автору
 
   для: cheops   (27.06.2005 в 12:09)
 

чертовски криво, но хоть работает :)

       if(isset($_SESSION['correct_answer'])){$correct_answer=$_SESSION['correct_answer'];}//проверка - чтобы не накручивали счетчик обычным "Ф5".
        if($timestamp0<=time()-35){ $message="Слишком много времени затрачено на ответ. "; //это на тот случай, если все же не сработает мета-тэг, перезагружающий страницу.
        if(!$answ){$message=$message."Ответ не засчитан. Правильный ответ: <b>$correct_answer</b>";}}
        else
        {
         if(strtolower($answ)==strtolower($correct_answer))
            {
            $message=$message."Верно, <b>$correct_answer</b>.";
            $addscore=4-$hcnt;//добавляем 4 очка минус количество подсказок
            }
         else {$message="Ответ неверный. Правильный ответ: <b>$correct_answer</b>.";}
         }
         $ltun=strtolower($username);//надоело каждый раз писать одно и то же, вводим переменную с мелким именем юзера

         if(isset($_SESSION['correct_answer']))$Baza[$ltun]['userscore']=$Baza[$ltun]['userscore']+$addscore;//опять же защита от пустого ответа - и добавление очков.

         vFajl($Baza,"users.dat");
         echo "<table align=center width=70% cellspacing=2 class=lttab>
         <tr><td align=center><br /><b>Ответ принят!</b><br /></td></tr>
         <tr><td align=center><br />$message<br /><br /></td></tr>
         <tr height=0><td align=center><br />
         <form id=opa action='play.php' method=post>
         <input id=op type='submit' value='Новый вопрос'>
         </form>
         </td></tr>
         <tr><td align=center>Ваш счет: ".$Baza[$ltun]['userscore']."</td></tr></table>";

         session_unregister("timestamp0");//обнуляем все подряд.
         session_unregister("correct_answer");
         session_unregister("qwestion");
         session_unregister("hcnt");

   
 
 автор: cheops   (27.06.2005 в 12:41)   письмо автору
 
   для: DJ Paltus   (27.06.2005 в 12:17)
 

Единственное что остаётся, это взять файл users.dat, пропустить его через unserialize() и пытаться расшифровать пароли пользователей по словарю - чтобы напакостить кому-нибудь у кого рейтинг повыше, либо dj_paltus, либо dulsinea, либо gimli - жаль у вас нет сервиса по смене пароля :))) Файл с ответами найти у меня воображения не хватило :)))

Вы лучше файлы с расширением .dat, переименуйте в файлы с расширением .php, первой строчкой в котором поместите
<?php exit(); ?>

А в обработке всегда пропускайте её.

   
 
 автор: DJ Paltus   (27.06.2005 в 12:45)   письмо автору
 
   для: cheops   (27.06.2005 в 12:41)
 

Ага...
Вопросы же находятся в файле.... внимаааание...
qwestions_base.php - в абсолютно текстовом виде.
Кстати, тут у меня давно свербит вопрос - доколе я могу вот так загонять вопросы в массив? Где-то же наступит предел... если расширять базу.
В любом случае, спасибо.

   
 
 автор: cheops   (27.06.2005 в 12:51)   письмо автору
 
   для: DJ Paltus   (27.06.2005 в 12:45)
 

>Вопросы же находятся в файле.... внимаааание...
>qwestions_base.php - в абсолютно текстовом виде.
Ура... теперь можно накручивать :)))
>Кстати, тут у меня давно свербит вопрос - доколе я могу вот
>так загонять вопросы в массив? Где-то же наступит предел...
>если расширять базу.
Где-то на 16 Мб или сколько там отведено на один скрипт в конфигурационном файле php.ini на вашем сервере.

   
 
 автор: DJ Paltus   (27.06.2005 в 12:59)   письмо автору
 
   для: cheops   (27.06.2005 в 12:51)
 

16 метров? Это же громадная груда вопросов... Пока что можно не париться на эту тему.
Но все же непонятно - как появился игрок с пустым ником?

   
 
 автор: cheops   (27.06.2005 в 13:27)   письмо автору
 
   для: DJ Paltus   (27.06.2005 в 12:59)
 

Да я тоже обратил внимание... Может в цикле где-нибудь образуется?

   
 
 автор: DJ Paltus   (27.06.2005 в 13:35)   письмо автору
 
   для: cheops   (27.06.2005 в 13:27)
 

Я подозреваю, что это был глюк с неисповедимым путем.

if(strlen($password)<3){$baduser=1; $msg="Пароль не должен быть короче трех символов.";}
if(ereg("[^0-9a-zA-Z_\-]+", $username)){$baduser=1; $msg="Недопустимые символы в имени игрока. Используйте латинский алфавит, цифры и символы тире (-) и подчеркивание (_).";}
if(isset($Baza[strtolower($username)])) {$baduser=1; $msg="Игрок с таким именем уже существует.";}
if((empty($username))or(empty($password))){$baduser=1; $msg="Введите имя игрока и пароль.";}
if($baduser!==1){
        $msg="Игрок <b>$username</b> зарегистрирован. <br /><a href='antirasslabon.php?username=$username'>Войти</a>";
        $username=strtolower($username);
        $Baza[$username]=array('password'=>md5($password));
        vFajl($Baza,"users.dat");
        }
print"$msg";

Вот же полная проверка на все-все-все. Где дыры? На вид таки нету.

   
 
 автор: DJ Paltus   (29.06.2005 в 09:44)   письмо автору
 
   для: DJ Paltus   (27.06.2005 в 13:35)
 

А... сам допер, ибо сам себе злобный тормоз.
В сценарии, куда эти юзернеймы отсылаются, не стояло проверки на присутствие юзернейма как такового. То есть, загружая сценарий игры вручную, в обход входной страницы, можно было поиграть, а потом пользователь с именем "" записывался в файл с прочими юзерами.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования