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

    +161

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    function mysql_prep($value)
    {
        if(get_magic_quotes_gpc()){
            $value = stripslashes($value);
        } else {
            $value = addslashes($value);
        }
        return $value;
    }

    "Heres a hassle free function to use to check your query string and before its handed to the db. It will add/remove slashes according to the get_magic_quotes_gpc state"

    http://lt.php.net/manual/en/function.addslashes.php

    Запостил: Cyanide, 02 Июля 2010

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

    • Волшебные кавычки придумали, чтобы защитить неувязков от SQL-инъекций. Но неувязки пошли дальше! Теперь волшебные кавычки, наоборот, делают их скрипты уязвимыми! Восславим же идиотизм, товарищи, ибо воистину нет ему границ.
      Ответить
      • Да-да-да, и все для того, чтобы криворукие товарищи могли без проблем вставлять параметры из формы в SQL-строку -- удобно же, бля! А bind_param придумали идиоты, которые ничего не понимают в труЪ-PHP
        Ответить
    • )))))))))))идиоты

      господи, спасибо тебе за CallableStatement, например
      Ответить
    • Тут какой-то двойной говнокод. С одной стороны, убирать волшебные кавычки и пихать в SQL-запрос как минимум неверно. С другой стороны, если кавычки отключены, зачем их добавлять?
      Ответить
      • автор, видимо, слышал звон, да не знает где он. Та же ситуевина, что и в http://govnokod.ru/3624 - в одном месте он прочитал, что волшебные кавычки - это зло, с другой, он слышал, что кавычки надо экранировать во избежание иньекций.
        к слову, одно только addslashes не защитит надежно от иньекций. Гораздо надежнее mysql_real_escape_string, но и это даже не 100% защита.
        Ответить
        • А по мне mysql_real_escape_string самое то, если кавычки в начале и конце не забыть поставить.
          Ответить
          • по мне тоже, но минздрав предупреждает, и рекомендует юзать prepared statements
            Ответить
        • Lure Of Chaos привидите пример когда mysql_real_escape_string не 100% защита от инекций
          Ответить
          • Мой вариант, уже упоминал:

            mysql_query('SELECT * FROM table WHERE id=' . mysql_real_escape_string($_GET['id']));

            Вроде бы всё хорошо, но кавычек нет, поэтому их не надо закрывать, чтобы сделать иньекцию. А извратиться без кавычек очень даже можно.

            А вообще, немного тупой пример, ибо id - это число, надо делать intval.
            Ответить
          • опять же, нулл-чар или подобное, особенно в сочетании без кавычек
            Ответить
            • mysql_real_escape_string нулл экранирует
              Ответить
              • кажись какой то (не помню уже) баг был, позволяющий даже при использовании этой функции выйти за кавычки
                Ответить

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