1. PHP / Говнокод #25570

    +2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    <?php
        define('_SECUR_GAMES', 1);
        $rootpath = '../';
        require_once '../includes/start.php';
        require_once '../includes/function.php';
        require_once '../includes/header.php';
    if($level >0 AND $fr_id!=0)
    {
    $header='alliance';
    mysql_query("UPDATE `mesto` SET `place` = '".check(htmlspecialchars(stripslashes(addslashes(strip_tags(mysql_real_escape_string(trim($header)))))))."' WHERE `uid`=".check(htmlspecialchars(stripslashes(addslashes(strip_tags(mysql_real_escape_string(trim($use_id)))))))."");
    }
    $fr=check(htmlspecialchars(stripslashes(addslashes(strip_tags(mysql_real_escape_string(trim($_GET['f'])))))));
    $q = mysql_query("SELECT * FROM `fractions` WHERE `id`='".check(htmlspecialchars(stripslashes(addslashes(strip_tags(mysql_real_escape_string(trim($fr)))))))."'");
    $f = mysql_fetch_array($q);
    $ucount = mysql_result(mysql_query("SELECT COUNT(*) FROM `fractions_users` WHERE `uid`='".check(htmlspecialchars(stripslashes(addslashes(strip_tags(mysql_real_escape_string(trim($use_id)))))))."' AND `fid`='".check(htmlspecialchars(stripslashes(addslashes(strip_tags(mysql_real_escape_string(trim($f['id'])))))))."';"), 0);
    $fadm = mysql_result(mysql_query("SELECT COUNT(*) FROM `fractions_users` WHERE `uid`='".check(htmlspecialchars(stripslashes(addslashes(strip_tags(mysql_real_escape_string(trim($use_id)))))))."' AND `fid`='".check(htmlspecialchars(stripslashes(addslashes(strip_tags(mysql_real_escape_string(trim($f['id'])))))))."' AND `adm`=1;"), 0);
        if($game==0 OR $level==0 OR $ban==1){
               echo "<title>Доступ закрыт!!!</title>";

    @since 2019

    Запостил: eskrano, 25 Апреля 2019

    Комментарии (60) RSS

    • показать все, что скрытоvanished
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • Значит, код защищён и от XSS, и от SQL-инъекции! Вероятно, ещё от чего-нибудь защищён, раз столько функций сразу вызвали.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • Там ещё зачем-то вызывается загадочная функция check.
                Ответить
                • Она эскейпит строку по второму разу, чтоб наверняка.
                  Ответить
                  • Нашёл код этой функции:
                    function check($str)
                        {
                            $str = htmlentities($str, ENT_QUOTES, 'UTF-8');
                            $str = str_replace("'", "'", $str);
                            $str = str_replace("rn", "<br/>", $str);
                            $str = strtr($str, array(chr("0") => "", chr("1") => "", chr("2") => "", chr("3") => "", chr("4") => "", chr("5") => "", chr("6") => "", chr("7") => "", chr("8") => "", chr("9") => "", chr("10") => "", chr("11") => "", chr("12") => "", chr
                            ("13") => "", chr("14") => "", chr("15") => "", chr("16") => "", chr("17") => "", chr("18") => "", chr("19") => "", chr("20") => "", chr("21") => "", chr("22") => "", chr("23") => "", chr("24") => "", chr("25") => "", chr("26") => "", chr("27") =>
                            "", chr("28") => "", chr("29") => "", chr("30") => "", chr("31") => ""));
                            $str = str_replace('\', "\", $str);
                            $str = str_replace("|", "I", $str);
                            $str = str_replace("||", "I", $str);
                            $str = str_replace("/\$/", "$", $str);
                            $str = str_replace("[l]http://", "[l]", $str);
                            $str = str_replace("[l] http://", "[l]", $str);
                            $str = mysql_real_escape_string($str);
                            return $str;
                        }
                    Ответить
      • > addslashes
        Возвращает строку с обратным слешем перед символами, которые нужно экранировать.

        Кому и зачем их нужно экранировать?
        Ответить
        • Чтобы инъекции не было!

          До версии PHP 5.4.0, директива magic_quotes_gpc была включена по умолчанию и, фактически, addslashes() автоматом применялась к данным GET, POST и COOKIE. Данная возможность была объявлена УСТАРЕВШЕЙ, начиная с PHP 5.3.0 и была УДАЛЕНА в PHP 5.4.0.
          Ответить
          • Т.е. код, который отлично работал на 5.3, в 5.4 стал уязвимым?
            Ответить
            • Пыхопроблемы меня только забавляют.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Ну как, работал сайт на PHP 5.3, разработчик надеялся на магические кавычки. А потом админ обновил PHP до 5.4, а там магические кавычки по умолчанию выключены.

                  С чем бы более простым сравнить? Ну например, лазил кто-то по сайтам Хромом из Windows XP. Назойливой рекламы не было, потому что рекламные баннеры были на https с эллиптической криптографией, а с таким софтом этот протокол недоступен. А потом он решил перейти на более современную систему или сменить браузер на нормальный.
                  Ответить
      • $pswd = $salt .  md5(md5($salt) . md5($_POST['login']) . md5($_POST['password']));
        mysql_query("INSERT INTO users (login, password) value ($_POST['user'], $pswd);

        а на дворе 2019 год...
        Ответить

    Добавить комментарий