1. C++ / Говнокод #4378

    +164

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    srand(time(0));
    for (i = 0; i < 10000; i++) {
        sprintf(qtrc, "/tmp/%010d", rand());
        if (!mkdir(qtrc, 0700))
            goto okay;
    }
    logPanic("Cannot create $HOME\n");
    okay:

    Исходники KDM

    Запостил: proDOOMman, 17 Октября 2010

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

    • нда... mktempdir()/подобное реально не хватает.

      знаю и понимаю почему так делают, но говно однозначно. но не в самом KDM - а в POSIX/UNIX....
      Ответить
      • но если подумать, то даже в самой OS это как бы по другому то и не реализовать. без лока на dnode /tmp/ это работать не будет. но локи как раз в таких местах стараются как только можно избегать. и никто исключения для security oriented приложений делать не будет - тем более если это проблему можно решить вот таким тривиальным говнецом.
        Ответить
    • Почему бы не сгенерить какой-нибудь UUID?
      Ответить
    • > for (i = 0; i < 10000; i++) {
      > goto okay;
      на первый взгляд чья-то лаба.
      на второй взгяд редкостное уебанство
      Ответить
    • А
      srand(time(0));
      не говно?
      Это же полностью предсказуемый перебор, более того, заранее известный! Т.е. как минимум DOS-атаку произвести просто элементарно, а может и что по-хуже.
      Ответить
      • А с чего вы взяли, что данный код должен быть устойчив ко взлому ? Заранее известный, если знать в какую секунду будет вызываться.
        Ответить
      • ...чем дальше в лес - тем ближе вылез
        Ответить
      • Следует признать, что я был не прав, и не заметил time. Мне почему-то показалось, что код srand(0). Реальный код, хотя и не идеален, конечно, намного лучше.
        Ответить
        • >не заметил time
          можно подумать это что-то меняет
          Ответить
          • какова вероятность, что папка не создастся (не в случае когда прав нету)?
            какова вероятность повторения GUID (пусть и в условиях сферического в ваккуме)?
            какова вероятность повторения MD5?
            Все пользуются и ничего...
            Однако подобному софту, управляющему работой ядерным реактором (например) я бы не доверял :)
            Ответить
            • Повторения MD5 чего? Вопрос о случайном совпадении или о злонамеренном? Случайного и так скорее всего не будет, а при злонамеренном ни GUID, ни MD5 не помогают. Для надёжности нужны криптографически случайные числа.
              Ответить
              • в этом и есть ответ
                Ответить
                • поясню:
                  речь видимо, идет о случайном совпадении - вероятность этого очень мала.
                  При злонамеренном совпадении - изначально нужно ставить задачу соответственно, и уж KDM к ним относить нет смысла.
                  Ответить
    • Чувствую, что пованивает, но не пойму почему, ибо виндусятник, о процессе гуевого логона ничего не знаю. Может, кому не лень, набросаете 10..20 слов?
      Ответить
      • А тут ничего не нужно знать о процессе. Просто программа пытается создать временную папку и в цикле подбирает имя которое ещё не занято :)
        Ответить
        • Это-то из кода очевидно. А неясно, например, зачем хочет создать $HOME и почему в /tmp и под кем KDM (видимо и X) работает, получая полный овнерский доступ туда, вот
          Ответить
          • А это не $HOME. Это просто временная папка, она потом удаляется. ХЗ для чего она нужна :)
            Ответить
            • "Cannot create $HOME\n" как бы намекает нам...
              а имя переменной намекает на конфиг Qt который обычно берется из ~/.qt/qtrc
              видимо всё-таки это такое особое хоме...
              Ответить
              • > logPanic("Cannot create $HOME\n");
                Тут вообще просто строка.
                Не надо смущаться от вида значка $.
                Ответить

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