За последние 24 часа нас посетили 17086 программистов и 1597 роботов. Сейчас ищут 736 программистов ...

безопасность скрипта

Тема в разделе "PHP для новичков", создана пользователем gugi, 8 окт 2007.

  1. gugi

    gugi Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    28
    Симпатии:
    0
    Всем привет!
    Подскажите профи, в чем недостаток это-го скрипта авторизации?
    Есть ли уязвимые места или еще чета? Можно ли считать это скрипт безопасным?
    Писал сам.

    Код (Text):
    1.  
    2. <?php
    3. session_start();
    4.  
    5. if(isset($_GET['exit']))
    6. {
    7.     session_unset();
    8.     session_destroy();
    9.     header("location: x.php");
    10.     exit;
    11. }
    12.  
    13. if(!isset($_POST['loginame'],$_POST['password']))
    14. {
    15.     echo "<form method=post>
    16.             Логин: <input type=text name='loginame'><br>
    17.             Пароль: <input type=password name='password'><br>
    18.         <input type=submit value=' Вход '>
    19.           </form>
    20.     ";
    21. }
    22. else
    23. {
    24.     $conn=mysql_connect("localhost","root","");
    25.     mysql_select_db("silkreports");
    26.     $res=mysql_query("select username, password from sr_users where username='".$_POST['loginame']."'");
    27.     if(mysql_num_rows($res)!=0)
    28.     {
    29.         while($row=mysql_fetch_array($res,MYSQL_ASSOC))
    30.         {
    31.             $_SESSION['username']=$row['username'];
    32.             $_SESSION['password']=$row['password'];
    33.         }
    34.         if(($_POST['loginame']==$_SESSION['username'])&&(md5($_POST['password'])==$_SESSION['password']))
    35.         {
    36.             echo "Успешно авторизирован!!!";
    37.             echo "<br><a href=x.php?exit>Завершить работу</a>";
    38.         }
    39.         else
    40.         {
    41.             session_unset();
    42.             session_destroy();
    43.             header("location: x.php");
    44.             exit;
    45.         }
    46.     }
    47.     else
    48.     {
    49.         session_unset();
    50.         session_destroy();
    51.         header("location: x.php");
    52.         exit;
    53.     }
    54.     mysql_free_result($res);
    55.     mysql_close($conn);
    56. }
    57. ?>
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Что-то не так работает?
    Нафига?
     
  3. gugi

    gugi Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    28
    Симпатии:
    0
    Ну чесно сказать пока не решал нафига, но увере где-то пригодица, не могу пока сказать где...

    ну можно и так
    Код (Text):
    1.  
    2. ...
    3.      while($row=mysql_fetch_array($res,MYSQL_ASSOC))
    4.       {
    5.          $user=$row['username'];
    6.          $pswd=$row['password'];
    7.       }
    8.       if(($_POST['loginame']==$user)&&(md5($_POST['password'])==$pswd))
    9.       {
    10.          echo "Успешно авторизирован!!!";
    11.          echo "<br><a href=x.php?exit>Завершить работу</a>";
    12.       }
    13. ...
     
  4. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    А while нафига? Много юзеров с одинаковыми логинами и паролями?
     
  5. gugi

    gugi Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    28
    Симпатии:
    0
    это тупо дурная привычка, пардон...:)
     
  6. ustas

    ustas Активный пользователь

    С нами с:
    17 сен 2007
    Сообщения:
    59
    Симпатии:
    0
    у тебя нет ни одной неуязвимой строки кода, изучай матчасть. Это просто сплошная sql инъекция.
    код в помойку.
     
  7. gugi

    gugi Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    28
    Симпатии:
    0
    Еще прикинул что забыл вот что...
    Код (Text):
    1.  
    2. $res=mysql_query("select username, password from sr_users where username='".mysql_escape_string($_POST['loginame'])."'");
     
  8. gugi

    gugi Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    28
    Симпатии:
    0
    Тогда будь добр, опиши уязвимости, а то словами одними сыт не будешь... Примеры в студию плизз!
     
  9. ustas

    ustas Активный пользователь

    С нами с:
    17 сен 2007
    Сообщения:
    59
    Симпатии:
    0
    ты забыл про сон, проспись.
     
  10. gugi

    gugi Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    28
    Симпатии:
    0
    Ты считаешь это профессиональным ответом? Или ты таким образом самоутвердился? Бывает...
    Лялякать все могут, а реально показать в чем проблема, никто не может.
     
  11. ustas

    ustas Активный пользователь

    С нами с:
    17 сен 2007
    Сообщения:
    59
    Симпатии:
    0
    тебе мешает твое нежелание читать нормальные книги, а не ужасные статьи и примеры говнокода. лялякать можно на проверку входных параметров, ты логин на даже на допустимость не проверил. А если тебе пару тысяч запросов отправить, с метровым логином и таким же паролем, сколько твой сервер продержится, писать лень, еще штук 5 багов
     
  12. gugi

    gugi Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    28
    Симпатии:
    0
    Спасибо, я учту это.
     
  13. gugi

    gugi Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    28
    Симпатии:
    0
    Какие книги, например?
     
  14. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.557
    Симпатии:
    631
    Книга "PHP и MySQL. Библия пользователя" - очень полезная книга :p
    Хотя читать её от корки до корки я смысла не вижу, но как справочник оч. полезна :)
     
  15. gugi

    gugi Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    28
    Симпатии:
    0
    Хорошо. Помогите понять, как еще можно боротся с иньекциями, если к примеру я буду использовать:
    mysql_escape_string();
    addslashes();
    Что еще нужно сделать чтобы запросы были безопасные?
     
  16. gugi

    gugi Активный пользователь

    С нами с:
    21 авг 2007
    Сообщения:
    28
    Симпатии:
    0
    Ребят, что никто ничего не скажет? не поделится? :(
     
  17. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  18. shreck

    shreck Активный пользователь

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    Есть (на мой взгляд) хорошая функция для обработки переменных, которые потом пойдут в запрос
    PHP:
    1.  
    2. <?php
    3. // Функция экранирования переменных
    4. function quote_smart($value)
    5. {
    6.     // если magic_quotes_gpc включена - используем stripslashes
    7.     if (get_magic_quotes_gpc()) {
    8.         $value = stripslashes($value);
    9.     }
    10.     // Если переменная - число, то экранировать её не нужно
    11.     // если нет - то окружем её кавычками, и экранируем
    12.     if (!is_numeric($value)) {
    13.         $value = "'" . mysql_real_escape_string($value) . "'";
    14.     }
    15.     return $value;
    16. }
    17. //(c) [url=http://ru2.php.net/manual/ru/function.mysql-real-escape-string.php]http://ru2.php.net/manual/ru/function.m ... string.php[/url]
    18. ?>
    19.