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

    +50

    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
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    <?php
    session_start();
    if(empty($_SESSION['UserLogin']) or empty($_SESSION['UserId']))
    {
      header('Location: /');
    }
    else
    {
      include("application/db.config.php");
      $GetterUser = $_POST['ForUser'];
      $SenderUser = $_SESSION['UserId'];
      $Rem = strip_tags($_POST['Rem']);
      $Text = strip_tags($_POST['Text']);
    
      if($Rem == "" or $Text == "")
      {
        header("Location: sent_mess?to=$GetterUser&status=bad");
      }
      else
      {
        $SendingMessQuery = mysql_query("INSERT INTO Dialogs(From, To, Rem, Text) VALUES($SenderUser, $GetterUser, '$Rem', '$Text')", $db) or die(mysql_error());
        mysql_close($db);
        header("Location: sent_mess?to=$GetterUser&status=good");
      }
    }
    ...

    Запостил: Govnisti_Diavol, 11 Декабря 2012

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

    • Ни дня без инъекций
      Ответить
    • Отправленное месиво, юзер-геттер... Классная подборка названий. :)
      Ответить
    • Это жесть ребятки :]
      Кажется, слово "безопасность" автору неизвестно...
      Ответить
    • показать все, что скрытоВ этом весь php
      Ответить
      • PHP вполне сносный инструмент, если ты не криворукий гений.
        Ответить
    • Раньше, читая Хакер, думал ебать, дебилы такую простую дырку не закрыли, шли годы, Хакер стал не тот, я думал наверно уже и не встретишь таких дыр в php, либо cms либо фреймворки, либо еще что-то.
      Но теперь я думаю Ебать это пиздец >_<
      Ответить
      • А ведь серебрянная пуля от SQL иньекций в PHP есть уже хрен знает сколько лет (prepared statements)... Но пыхеры все-равно грызут кактус и проставляют значения в запрос руками...
        Ответить
        • Только как часть PDO, ЕМНИП. А у него какие-то свои косяки могут быть, плюс несовместимость со всем прошлым говном.

          P.S. Как минимум - не поддерживаются олдфажныенекрофильские версии, что немного сужает область применения.
          Ответить
          • Ну в mysqli, емнип, тоже есть. Но косяки PDO в свежих версиях уже всяко пофиксены, а вот косяки тех, кто пытается экранировать сам, и не понимает как и зачем, останутся навсегда (ну или до первого взлома).

            > некрофильские версии
            Забили бы все на эту некрофилию, так даже самые слоупочные хостеры быстренько бы накатили пых посвежее, с поддержкой PDO. Куда бы они делись.

            P.S. Самое забавное, что драйвера на редкие базы типа того же ibm informix остались только через PDO, а старые версии, которые без PDO они тупо выкинули.
            Ответить
            • Вроде как mysql уже давно deprecated, но сразу всех отсадить не получится. Да и стенания по поводу апгрейдов существуют ровно столько, сколько сами апгрейды.
              Вот есть чудесный продукт от жопы одина. Сначала пищали при переходе с шестой версии на седьмую. Потом на восьмую. Теперь пищат при каждом мажорном релизе. Ситуация сохраняется в том числе и для продуктов на платформе. Слоупоуков всё устраивает в БП 1.6, ну, кроме того, что её перестали поддерживать. Обновление может сулить геморрой администраторам и нервный тик бухам, поскольку сменили там обширно.
              Кто прав? Ретрограды или прогрессоры? И такая ситуация повсеместно.
              Ответить
              • Ну в 1с кстати понятно почему пищат. Там же у многих кастомные конфигурации, которые как-то надо портировать. А тот кто пилил конфигурацию уже или слинял в другой город, или забыл как это делал... Тут ретроградов я понимаю, и полностью на их стороне.

                А с пхп ситуация немного другая - можно запустить несколько его версий одновременно. Да, это не совсем тривиально, если пых висит модулем, но вполне реально. Есть старый код - ну и пусть себе крутится на старой пыхе еще лет 10. А новые то проекты зачем писать под заведомо мертвую платформу? Тут я буду на стороне прогресса.
                Ответить
              • > жопы одина
                ithappens почитываем?
                Ответить
                • Статья-детектор.
                  Ответить
                • Туда перепостили с бошорка. А бошорк я почитываю, да.
                  Ответить
                  • хмм... Что-то не помню где я сам это читал. Потому что читаю и то и то.
                    Ну да ладно )
                    Ответить
          • Вот я всё наврал снова. Подстановка есть и в mysqli.
            Тут возникает интересный вопрос. Дело в том, что подготовленные выражения защищают от одного рода уязвимостей, но при этом расхолащивают программистов, уверяя в тотальной безопасности. Как защита от SQL-инъекций (определённого рода) это подходит просто отлично, да, но при этом не стоит забывать, что всё равно _необходимо_ тщательно валидировать данные.
            А в этом никаких пуль не бывает.
            Ответить
        • Еще есть магические кавычки, например.
          Ответить
          • Не вариант. Дают только иллюзию защищенности. По-хорошему скрипт, использующий их, должен либо попытаться их включить, либо сделать харакири, если они выключены, и нет никакой возможности их активировать. Работать при отключенных меджик квотах он не должен ни при каких обстоятельствах.

            Но тот, кто допускает в своем коде SQL иньекции и об этой проверке забудет... Поэтому мэджик квоты - хорошая идея, но хуёвая реализация.

            P.S. Можно было что-то типа заразных строк (в пёрле, емнип, можно включить такой режим). Все входные строки и переменные окружения заразные. Все строки, порожденные от таких - тоже. sql функции падают с фатальной ошибкой, получив такую строку. Вылечить строку можно только явным кастом, или включив меджик квоты.
            P.P.S. Хотя и тут пыхер будет писать в духе mysql_query(untaint(...))
            Ответить

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