Насколько безопасен код, и как его отпимизировать

Discussion in 'PHP' started by seofilms, 20 May 2012.

  1. seofilms

    seofilms Elder - Старейшина

    Joined:
    27 May 2009
    Messages:
    66
    Likes Received:
    46
    Reputations:
    14
    Написал быдло код)
    Посмотрите насколько уязвим и если не сложно, напишите что исправить, чтоб в сл. раз знал как правильно написать =)
    Заранее спасибо.
    PHP:
    <? 
    Header("Content-Type: text/html; charset=utf-8"); 
    $close="close";
    if (
    $_GET[id] == $close)
    {
        
    SetCookie("login",""time() + 3600);
        
    SetCookie("pass",""time() + 3600);
        
    header('Location: /admin.php'); 
        exit();
    }
    include 
    "config.php";
    $log=$_POST['login'];
    $pass=md5($_POST['pass']);
    if(!empty(
    $log) and !empty($pass))
    {
        
    SetCookie("login",$logtime() + 3600);
        
    SetCookie("pass",$passtime() + 3600);
        
    header('Location: /admin.php');
        exit();
    }
    $logged=$_COOKIE['login'];
    $passed=$_COOKIE['pass'];
    $query mysql_query('SELECT * FROM `users`');
    $myrow mysql_fetch_array($query);
    $gogo=$myrow['pass'];
    if (
    $gogo !== $passed)
    {
        die( 
        
    "
        <form action='' method='post'>
        login:<br><input type='text' name='login' class='user'><br>
        pass:<br><input type='password' name='pass' id='pass' class='user'>
        <p><input type='submit' value='Vstoupit' class=''></p>
        </form>
        "
    );
    }
    echo 
    "<a href=/admin.php?id=close>Odhlásit se</a>";
    $result=mysql_query('SELECT * FROM `zakazy`');
    echo 
    "<form action='' method='POST'>\n";
    echo 
    "<table border='1' width='100%' cellpadding='5'>";
    echo 
    "<th>Jmeno</th><th>e-mail</th><th>tel. číslo</th><th>Ostátní udáje</th>";
    while (
    $row mysql_fetch_array($result)) 
    {
        echo 
    "<tr>";
        echo 
    "<td>" $row['jmeno'] . "</td>" "<td>" $row['mail'] . "</td>" "<td>" $row['tel'] . "<td>" $row['opravit'] . "</td>" "<td>" "<input type=" "'" "checkbox" "' " "name=" "'" "zakaz" "' " "value=" "'" .  $row['id'] . "'" ">" "</td>";
        echo 
    "\n</tr>";
    }
    echo 
    "\n</table>\n";
    $checkit=$_POST['zakaz'];
    if (isset(
    $checkit))
    {
        
    $checkit=mysql_real_escape_string($checkit);
        
    $result=mysql_query('DELETE FROM `pcrepair1`.`zakazy` where `zakazy`.`id`='. (int)$checkit);
        echo 
    "<meta http-equiv='Refresh' content='0; URL='>";
    }
    ?>
    <select>
      <option name="smazat">Smazat</option>
      <option name="zmenit">Zmenit</option>
    </select>
    <input type="submit" value="pouzit">
    </form>
     
    #1 seofilms, 20 May 2012
    Last edited: 20 May 2012
  2. seofilms

    seofilms Elder - Старейшина

    Joined:
    27 May 2009
    Messages:
    66
    Likes Received:
    46
    Reputations:
    14
    Да вроде фильтруется =
    $checkit=mysql_real_escape_string($checkit);
     
  3. <Cyber-punk>

    <Cyber-punk> Smash the Stack

    Joined:
    1 Oct 2009
    Messages:
    658
    Likes Received:
    315
    Reputations:
    430
    Можно привести к типу int, возможно это выход.
     
    _________________________
  4. daniel777

    daniel777 Elder - Старейшина

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37
    Вместо этого:
    HTML:
    echo "<meta http-equiv='refresh' content='0; url=/admin.php'>";
    мне кажется лучше использовать
    PHP:
    header('Location: /admin.php');
     
  5. seofilms

    seofilms Elder - Старейшина

    Joined:
    27 May 2009
    Messages:
    66
    Likes Received:
    46
    Reputations:
    14
    Сделаю.
    Ага, просто проблема была с заголовками, вылетала ошибка, вот я и http редирект ставил, теперь все норм.
    Поставил header :)
     
  6. daniel777

    daniel777 Elder - Старейшина

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37
    После header() не забудь поставить exit();
     
  7. seofilms

    seofilms Elder - Старейшина

    Joined:
    27 May 2009
    Messages:
    66
    Likes Received:
    46
    Reputations:
    14
    Спасибо, не знал что он там нужен, для чего ?
    Немного изменил главный пост, переписал редирект и добавил (int)
     
  8. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Как оно работает?
    А именно то, что id не взято в кавычки.
     
  9. daniel777

    daniel777 Elder - Старейшина

    Joined:
    8 Jul 2010
    Messages:
    517
    Likes Received:
    90
    Reputations:
    37
    Если не использовать функцию exit, то весь код после header() будет выполнятся.
     
  10. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    396
    Likes Received:
    79
    Reputations:
    16
    Да и в начале скрипта error_reporting(0); :)
    Это не троллинг, там раскрытие путей возможно. Можешь просто фильтровать input на массивы.
    Например, так:
    PHP:
    foreach(array_merge(array_values($_GET), array_values($_POST), array_values($_COOKIE)) as $inp)
    {
    if(
    is_array($inp)) echo '<img src="http://static1.fjcdn.com/thumbnails/comments/Haha+I+lol+d+_f7cbf6c099fe2e08fa1976f591ab21b6.jpg"></img>'; exit;
    }
    Код должен находится в начале скрипта.
     
    #10 AnGeI, 20 May 2012
    Last edited: 20 May 2012
  11. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Всем дарова в этом треде )

    Как-бы еще не помешало бы в сааамом начале ob_start(); и в сааамом конце ob_end_flush(); - ты просто в скрипте куки ставишь, хедеры посылаешь - может быть ошибка без этих функций.
     
  12. seofilms

    seofilms Elder - Старейшина

    Joined:
    27 May 2009
    Messages:
    66
    Likes Received:
    46
    Reputations:
    14
    Даже не знаю что это, почитаю.
    Не знаю зачем это, читал что это буферизация, при этом в комментариях было написано что загр. стр. при этом не ускорится.
     
  13. AnGeI

    AnGeI Elder - Старейшина

    Joined:
    8 Dec 2008
    Messages:
    396
    Likes Received:
    79
    Reputations:
    16
    Ясное дело, что не ускорится. "Refresh content=0" - это вообще огонь, да еще и в конце скрипта. Для мониторинга БД лучше использовать постоянный цикл, - это если забыть про стандартные средства управления БД.
     
  14. |qbz|

    |qbz| Banned

    Joined:
    25 Dec 2009
    Messages:
    385
    Likes Received:
    169
    Reputations:
    65
    Это какбе не для ускорения ради. Смотри, любой ответ сервера состоит из двух кусков - шапки и тела. Вот шапка идет в начале (что следует из названия), а потом идет тело. Все куки, редиректы и прочее передаются в шапке. То есть страница составляется пхп таким образом, что сперва формируется шапка (раз она в начале), а потом дописывается тело. И если ты уже начал выдавать куски "тела", то в шапку записывать (передавать куки, редиректить и прочее) - уже нельзя. Точнее можно, но тогда нужно юзать данные функции буферизации. С ними это не проблема, с ними можно редактировать шапку в любом месте.