|
|
|
|
|
для: 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
(27.06.2005 в 12:59)
| | Да я тоже обратил внимание... Может в цикле где-нибудь образуется? | |
|
|
|
|
|
|
|
для: cheops
(27.06.2005 в 12:51)
| | 16 метров? Это же громадная груда вопросов... Пока что можно не париться на эту тему.
Но все же непонятно - как появился игрок с пустым ником? | |
|
|
|
|
|
|
|
для: DJ Paltus
(27.06.2005 в 12:45)
| | >Вопросы же находятся в файле.... внимаааание...
>qwestions_base.php - в абсолютно текстовом виде.
Ура... теперь можно накручивать :)))
>Кстати, тут у меня давно свербит вопрос - доколе я могу вот
>так загонять вопросы в массив? Где-то же наступит предел...
>если расширять базу.
Где-то на 16 Мб или сколько там отведено на один скрипт в конфигурационном файле php.ini на вашем сервере. | |
|
|
|
|
|
|
|
для: cheops
(27.06.2005 в 12:41)
| | Ага...
Вопросы же находятся в файле.... внимаааание...
qwestions_base.php - в абсолютно текстовом виде.
Кстати, тут у меня давно свербит вопрос - доколе я могу вот так загонять вопросы в массив? Где-то же наступит предел... если расширять базу.
В любом случае, спасибо. | |
|
|
|
|
|
|
|
для: DJ Paltus
(27.06.2005 в 12:17)
| | Единственное что остаётся, это взять файл users.dat, пропустить его через unserialize() и пытаться расшифровать пароли пользователей по словарю - чтобы напакостить кому-нибудь у кого рейтинг повыше, либо dj_paltus, либо dulsinea, либо gimli - жаль у вас нет сервиса по смене пароля :))) Файл с ответами найти у меня воображения не хватило :)))
Вы лучше файлы с расширением .dat, переименуйте в файлы с расширением .php, первой строчкой в котором поместите
А в обработке всегда пропускайте её. | |
|
|
|
|
|
|
|
для: 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");
|
| |
|
|
|
|
|
|
|
для: DJ Paltus
(27.06.2005 в 12:04)
| | Больше интереснее как происходит проверка ответа... часто люди просто хотят накрутить свой рейтинг. Я туда и подставлял вставки. | |
|
|
|
|
|
|
|
для: cheops
(27.06.2005 в 11:56)
| | А, докидываю.
У меня MySQL не используется, данные о пользователе хранятся в файле в виде сериализованного массива, пароли зашифрованы в md5 и там же, проверка имени пользователя идет после загрузки и десериализации массива из файла примерно следующим образом:
То есть, в файле массив массивов, элементами которого является usename со всеми параметрами "в себе" - пароль, счет.
Но как Вам удалось зарегистрировать игрока с пустым именем!?
Проверка имени происходит так:
if(ereg("[^0-9a-zA-Z_\-]+", $username)){$baduser=1; $msg="сообщение";}
if((empty($username))or(empty($password))){$baduser=1; $msg="опять сообещение";}
|
| |
|
|
|
|