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

    +164.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
    $_GET = array_map('trim', $_GET);
    $_POST = array_map('trim', $_POST);
    $_COOKIE = array_map('trim', $_COOKIE);
    $_REQUEST = array_map('trim', $_REQUEST);
    if(get_magic_quotes_gpc()):
        $_GET = array_map('stripslashes', $_GET);
        $_POST = array_map('stripslashes', $_POST);
        $_COOKIE = array_map('stripslashes', $_COOKIE);
        $_REQUEST = array_map('stripslashes', $_REQUEST);
    endif;
    $_GET = array_map('mysql_real_escape_string', $_GET);
    $_POST = array_map('mysql_real_escape_string', $_POST);
    $_COOKIE = array_map('mysql_real_escape_string', $_COOKIE);
    $_REQUEST = array_map('mysql_real_escape_string', $_REQUEST);

    Нашел в комментах к пхпшной ф-ции mysql_real_escape_string().
    Очевидно, код чешет все суперглобалы на вшивость, чтобы затем можно было механически юзать все "без проверки". Пиздец.

    Запостил: htmlcoder-exe, 20 Февраля 2010

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

    • Если автоматическое экранирование включено - убираем слеши. Потом снова добавляем слеши. Это пиздец.
      Ответить
      • Строго говоря, своя логика тут есть. Для каждой СУБД, по идее, нужно своё специфическое экранирование, а не стандартные addslashes, экранирующие всё под одну гребёнку. Но, как детально разобравшийся в специфике экранирования для MySQL, могу сказать, что конкретно к ней это не относится, и обычного addslashes хватает за уши.
        Ответить
        • addslashes не экранирует \r и \n.
          если на значения это не влияет, то на названия полей\таблиц очень даже.
          Ответить
          • Пусть даже так - возникают два вопроса:
            1) ты уверен, что действительно стоит подставлять названия полей/таблиц из пользовательского ввода? Я бы просто не стал так делать, т.е. построил бы приложение так, чтобы такой необходимости не возникало. (Если есть контрпримеры - буду рад выслушать.)
            2) а для чего в названиях полей/таблиц могут потребоваться \r или \n? Разве они вообще там допустимы? (Опять же, буду рад контрпримеру. Имел дело только с MySQL, MS SQL и PostgreSQL.)
            Ответить
        • http://raz0r.name/vulnerabilities/sql-inekcii-svyazannye-s-multibajtovymi-kodirovkami-i-addslashes/
          Ответить
          • Точно, про то, что на мультибайтовых аддслэшес не рулит, я и забыл... Ну да по фигу, всё равно использую prepared statements в PDO.
            Ответить
    • Я даже отправлю автору привет на почту.

      >Hi, Alan! Your code ... seems to be working perfectly for me! Thank you!

      Мхаха %)
      Ответить
    • про $_SERVER забыл
      Ответить

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