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

    +154.8

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    $srv_id=$_POST['srv_id'];
    $result = mysql_query("
    SELECT *
    FROM srv
    WHERE
    srv_id='$srv_id'");
    $data = mysql_fetch_array($result);
    // ...
    $srv_id=$data['srv_id'];

    Запостил: marten.spb, 25 Ноября 2009

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

    • Ничего, кроме возможности SQL-инъекции тут не вижу
      Ответить
    • дохленько
      Ответить
    • marten.spb скорее хотел указать не на SQL-инъекцию, а на то, что $srv_id берется из результата выборки, хотя мы как бы её знаем.
      Ответить
      • Ну, какбэ никто не гарантировал, что ID в базе и ID переданный через POST/GET совпадают. Тут нужны комментарии запостившего.
        Ответить
        • Как она может не совпадать???
          В запросе "WHERE srv_id='$srv_id'"!
          Ответить
        • совпадает конечно :)
          Ответить
          • ну, тогда да — говнокод, согласен.
            А в \\... что за код был?
            Ответить
            • да тот код к делу не относится и никак id не меняет
              Ответить
          • А если нет записи в таблице с такой id?
            Ответить
            • тогда просто выбрасывается исключение.
              здесь не показано
              Ответить
              • Я к тому, что если нет записи, то $_POST['srv_id'] не равно $data['srv_id']

                Так что присоединяюсь к выше сказанному, что кроме SQL-инъекции здесь ничего крамольного нет
                Ответить
                • из приведенного кода этого не видно, но если нет srv_id, то код дальше выполнять бессмысленно.
                  Ответить
                  • Почему не видно. Я как раз вижу выборку из таблицы. И при отсутствии записи $data['srv_id'] не будет равен $_POST['srv_id']. А вот что дальше с этим происходит, уже не видно.
                    Ответить
                  • Кстати, еще один момент. Попробуйте выполнить
                    SELECT * FROM srv WHERE srv_id='5' и SELECT * FROM srv WHERE srv_id='5a'
                    (при условии, что srv_id имеет целый тип)

                    5 замените на любую существующую id. MySQL вернет одну и ту же запись. Еще будете утверждать, что $srv_id=$data['srv_id']; не имеет смысла?
                    Ответить
      • Так можно проверить существование записи в таблице. Вариант с COUNT будет хуже, потому что вторым запросом, при наличии записи, все равно придется вытягивать данные
        Ответить
    • Говнокод, встречающийся в умах и сердцах разработчиков большое количество раз, говнокодом быть не перестаёт!
      Ответить
    • забавно)) думаю только тут sql inj только сработает, больше ничего нет, если б видеть код далее, то можно залажать и на то что берем id зная его заранее, но суть в том что если нет такой записи, выполение скрипта произойдет в любом случае, а так можно отредиректить на 404
      Ответить
    • magic_quotes может?
      Ответить

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