Дыра

  • Автор темы fktrctq
  • Дата начала
fktrctq
Местный
Сообщения
62
Реакции
1
Всем привет! Вот такое дело, сканер выдет дыру, ну я исправляю, НО!!! Платежный пароль после исправления не ставится. В чем дело? почему так? ПОМОГИТЕ!!!
вот сам код:
Код:
<?PHP
$_OPTIMIZATION["title"] = "Настройки";
$usid = $_SESSION["user_id"];
$uname = $_SESSION["user"];

$db->Query("SELECT * FROM db_users_a WHERE id = '$usid'");
$user_data = $db->FetchArray();

$cosh = $user_data["payeer"];
?>
<div class="s-bk-lf">
<div class="acc-title">Настройки</div>
</div>

<div class="silver-bk">
<div class="clr"></div>   

<div style="text-align: center;"><font color="4A388E">Смена пароля:</font></b></div>
<BR />

<?PHP

    if(isset($_POST["old"])){
$old_pass = $func->IsPassword($_POST["old"]);
        $new_pass = $func->IsPassword($_POST["new"]);
$old = $func->md5Password($old_pass);
        $new = $func->md5Password($new_pass);

   if($old !== false AND strtolower($old) == strtolower($user_data["pass"])){
  
    if($new !== false){
   
     if( strtolower($new_pass) == strtolower($_POST["re_new"])){
    
      $db->Query("UPDATE db_users_a SET pass = '$new' WHERE id = '$usid'");
               
        $db->Query("SELECT * FROM db_users_a WHERE id = '$usid'");
        $user_data = $db->FetchArray();
       
        # Отправляем пароль
        $sender = new isender;
        $sender -> SetNewPassword($user_data["email"], $user_data["pass"], $user_data["email"]);
               
                echo "<center><font color = 'green'><b>Пароль изменен! </b></font></center><BR />";
    
     }else echo "<center><font color = 'red'><b>Пароль и повтор пароля не совпадают!</b></font></center><BR />";
   
    }else echo "<center><font color = 'red'><b>Новый пароль имеет неверный формат!</b></font></center><BR />";
  
   }else echo "<center><font color = 'red'><b>Старый пароль заполнен неверно!</b></font></center><BR />";
 
}

?>


<form action="" method="post">
<table width="330" border="0" align="center">
  <tr>
    <td><b><font color="black">Старый пароль:</b></td>
    <td align="center"><input type="password" maxlength="20" class="ps_r" style="text-align: center" name="old" /></td>
  </tr>
  <tr>
    <td><b><font color="black">Новый пароль:</b></td>
    <td align="center"><input type="password" maxlength="20" class="ps_r" style="text-align: center" name="new" /></td>
  </tr>
  <tr>
    <td><b><font color="black">Повтор пароля:</b></td>
    <td align="center"><input type="password" maxlength="20" class="ps_r" style="text-align: center" name="re_new" /></td>
  </tr>
  <tr>
    <td align="center" colspan="2"><BR /><input type="submit" value="Сменить пароль" class="butgame"/></td>
  </tr>
</table>
</form>
<div style="text-align: center; "><font color = 'purple'>Пароль должен содержать от 6 до 20 символов (только англ. символы)</div>
<br>
<BR />
<BR />



<div style="text-align: center;"><font color="4A388E">Платежный пароль:</font></div>
<BR />

<?php
    if(isset($_POST["plat_pass"])){
   
        function plat_passs($plat_passs){
        if(!preg_match("/^[0-9]{4}$/", $plat_passs)) return false;
             return $plat_passs;
        }
        $plat_passs = plat_passs($_POST["plat_pass"]);
        $plat = $plat_passs;
       
                if($plat_passs !== false){
                                   
                        $db->Query("UPDATE db_users_a SET plat_pass = '".mysql_real_escape_string($plat)."' WHERE id = '$usid'");
                       
                                                echo "<center><font color = '4A388E'><b>Платежный пароль установлен!</b></font></center><BR />";
                                   
        }else echo "<center><font color = 'red'><b>Платежный пароль имеет неверный формат!</b></font></center><BR />";

    }

?>

<?php
if($user_data['plat_pass'] != 0) {
   
    echo "<center><font color = '4A388E'><b>Платежный пароль уже установлен!</b></font></center><BR />";

} else {
?>
<form action="" method="post">
<table width="330" border="0" align="center">
 
  <tr>
    <td><b><font color="black">Введите пароль (обязательно):</b></td>
    <td align="center"><input type="text" maxlength="4" class="ps_plat" style="text-align: center" name="plat_pass" /></td>
  </tr>
  <tr>
    <td align="center" colspan="2"><BR /><input type="submit" value="Установить" class="butgame"/></td>
  </tr>
</table>
</form>

<div style="text-align: center;"><font color = 'purple'>Платежный пароль должен состоять только из цифр и не длиннее 4-х символов!</div>

<?php } ?>

<BR />
<BR /><BR />


<div style="text-align: center; "><font color="4A388E">Привязка кошелька:</font></div>
<BR />

<?php

if($user_data['payeer'] == "0") {
?>   

<?php
function ViewPurse($purse){
       
        if( substr($purse,0,1) != "P" ) return false;
        if( !preg_match("/^[0-9]{7,8}$/", substr($purse,1)) ) return false;   
        return $purse;
    }
   

    if(isset($_POST["purse"])){
       
        $purse = ViewPurse($_POST["purse"]);
       
        if($purse !== false){
                       
                        $db->Query("SELECT COUNT(*) FROM db_users_a WHERE payeer = '$purse'");
                        if($db->FetchRow() == 0){
                       
                        $db->Query("UPDATE db_users_a SET payeer = '$purse' WHERE id = '$usid'");
                                           
                                                echo "<center><font color = 'green'><b>Вы успешно привязали кошелек!</b></font></center><BR />";

                }else echo "<center><font color = 'red'><b>Указанный кошелек уже используется!</b></font></center><BR />";
               
        }else echo "<center><font color = 'red'><b>Номер кошелька имеет неверный формат!</b></font></center><BR />";

    }

?>


<form action="" method="post">
<table width="360" border="0" align="center">
 
  <tr>
    <td><b><font color="black">Кошелек Payeer: (начинается с Р)</b></td>
    <td align="center"><input type="text" maxlength="9" class="ps_r" style="text-align: center" name="purse" /></td>
  </tr>
  <tr>
    <td align="center" colspan="2"><BR /><input type="submit" value="Привязать" class="butgame"/></td>
  </tr>
</table>
</form>

<div style="text-align: center;"><font color = 'purple'>Номер кошелька должен состоять только из буквы P и 7 или 8 цифр!</div>
<BR />

<?php
}else echo "<center><font color = '4A388E'><b>Кошелек Payeer уже привязан!</b></font><BR /><BR /><font color = 'black'>{$cosh}</font></center><BR />";
?>

<div class="clr"></div>       
</div>
 
nicehash
Местный
Сообщения
40
Реакции
5
попробуйте это
Код:
    if(isset($_POST["plat_pass"])){
 
        function plat_passs($plat_passs){
        if(!preg_match("/^[0-9]{4}$/", $plat_passs)) return false;
             return $plat_passs;
        }
        $plat_passs = plat_passs($_POST["plat_pass"]);
        $plat_pass = ($plat_passs);
     
                if($plat_passs !== false){
                                 
                        $db->Query("UPDATE db_users_a SET plat_pass = '$plat_pass' WHERE id = '$usid'");
                     
                                                echo "<center><font color = '4A388E'><b>Платежный пароль установлен!</b></font></center><BR />";
                                 
        }else echo "<center><font color = 'red'><b>Платежный пароль имеет неверный формат!</b></font></center><BR />";

    }
 
kvozimir
Участник
Сообщения
1.935
Реакции
409
ICQ
734713 734713
Skype
это вроде как бы и не дыра а запрос в базу
 
fktrctq
Местный
Сообщения
62
Реакции
1
nicehash написал(а):
попробуйте это
Код:
    if(isset($_POST["plat_pass"])){

        function plat_passs($plat_passs){
        if(!preg_match("/^[0-9]{4}$/", $plat_passs)) return false;
             return $plat_passs;
        }
        $plat_passs = plat_passs($_POST["plat_pass"]);
        $plat_pass = ($plat_passs);
    
                if($plat_passs !== false){
                                
                        $db->Query("UPDATE db_users_a SET plat_pass = '$plat_pass' WHERE id = '$usid'");
                    
                                                echo "<center><font color = '4A388E'><b>Платежный пароль установлен!</b></font></center><BR />";
                                
        }else echo "<center><font color = 'red'><b>Платежный пароль имеет неверный формат!</b></font></center><BR />";

    }
поробовал, сканер показывает, что теперь нет иньекции, но плат пароль не ставится
 
nicehash
Местный
Сообщения
40
Реакции
5
вы проверяли может проблема с базой?
 
fktrctq
Местный
Сообщения
62
Реакции
1
nicehash написал(а):
вы проверяли может проблема с базой?
осталю тот же код, который работает, вроде сканер ошибка, т.к. айболит не ругается
 
sanek21012009
Участник
Сообщения
18
Реакции
0
а где такой сканер можно взять
 
AriCosmo
Участник
Сообщения
515
Реакции
115
Skype
он ругается на отсутствие фильтрации, ей можно добавить, но при это нужно будет изменить тип поля с плат. паролем
 
Remdev
Участник
Сообщения
77
Реакции
19
  • #10
Во-первых, тут нет инъекции, так как регулярка отлично проверяет, чтоб платёжный пароль состоял только из цифр и был длинной 4.
Просто сканер не работает так хорошо, как человек(но всё равно сойдёт)
Во-вторых, если хочешь всё-таки фильтровать, то вместо mysql_real_escape_string используй $db->escape
 
BURS
Участник
Сообщения
116
Реакции
6
  • #11
парни есть угроза влома О_о?
 
Remdev
Участник
Сообщения
77
Реакции
19
  • #12
BURS написал(а):
парни есть угроза влома О_о?
Это в админке. Если кто-то попадёт в админку, там и sql-inj не нужна будет
 
BURS
Участник
Сообщения
116
Реакции
6
  • #13
Remdev написал(а):
Это в админке. Если кто-то попадёт в админку, там и sql-inj не нужна будет
как подправить подскажи пожалуйста
 
Remdev
Участник
Сообщения
77
Реакции
19
  • #14
Экранируй данные тупым способом(mysql_real_escape_string) или фильтруй в зависимости от контекста.
Не видя код исходного файла пофиксить не сильно получится.
p.s. А у тебя файл statvivod.php работает? А то запрос выглядит некорректным
 
BURS
Участник
Сообщения
116
Реакции
6
  • #15
Remdev написал(а):
Экранируй данные тупым способом(mysql_real_escape_string) или фильтруй в зависимости от контекста.
Не видя код исходного файла пофиксить не сильно получится.
p.s. А у тебя файл statvivod.php работает? А то запрос выглядит некорректным
не знаю еще не подключал платежи
 
Сверху