Неожиданно правильное поведение программ

Тема в разделе "Мегафлуд", создана пользователем Mendel, 18 сен 2012.

  1. Mendel

    Mendel

    Регистр.:
    27 янв 2008
    Сообщения:
    217
    Симпатии:
    64
    Периодически сталкиваюсь с такой ситуацией, когда та или иная система не должна работать, но почему-то работает. Не люблю такие ситуации по двум причинам - сложно отлавливать, и коллеги смотрят косо... работает ведь, чего тебе надобно.
    А как вы относитесь к подобному "искусственному интеллекту"?
    С одной стороны вроде как работает ведь. И в 90% случаев оказывается, что я когда-то давным давно предусматривал что-то, что позволило ему так работать. С другой стороны - раз не ясно почему оно работает, то оно может работать неправильно, а значит быть уязвимо.
    Пример - сегодня показывал коллеге тест одной библиотеки которую я сейчас пишу.
    И заметил что я там сделал опечатку. Вместо:
    $data = $zarplata->read('money<?',100);
    написал
    $data = $zarplata->read('money<',100);
    т.е. пропустил плейсхолдер.
    Оказалось что код отработал верно, и по результатам теста все было ок.
    Разбор полетов показал, что работало оно за счет того, что:
    list($str_start,$str_end) = explode('#',$where,2);
    спокойно отдает $where как начало строки, и пустую строку как окончание.
    Но есть одно но - это отрабатывается в коде по обработке плейсхолдера # а значит и эскейпится и оформляется он несколько иначе. Итог - готовая sql-инъекция.

    При правильном проектировании на самом деле часто бывает, что оно работает, и ты не понимаешь почему, и это нормально... но при неправильном может быть и такое.....

    Вот скажите мне, я параноик который случайно был вознагражден за свою паранойю или так правильно? :)
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.401
    Симпатии:
    1.182
    Невнимательность случается абсолютно во всех профессиях, а вот последствия уже зависят от профессии...

    PS: Да телепортнётся сия философская беседа в Мегафлуд...
     
  3. _sergey_

    _sergey_ Писатель

    Регистр.:
    1 окт 2008
    Сообщения:
    1.744
    Симпатии:
    1.154
     
  4. Mendel

    Mendel

    Регистр.:
    27 янв 2008
    Сообщения:
    217
    Симпатии:
    64
    Спасибо что убили тему. Закройте плиз, а то либо я в этом движке не вижу как, либо мне еще не подняли Левел до закрытия своих тем.
     
  5. _sergey_

    _sergey_ Писатель

    Регистр.:
    1 окт 2008
    Сообщения:
    1.744
    Симпатии:
    1.154
    Эта функция юзерам сейчас недоступна.

    А по сути на что ты жалуешься? Мегафлуд более посещаем.

    Эта проблема, из-за усложнения систем. К примеру процессоры. Помню читал уже довольно давно, что экспериментаторы купили у интел неск сотен отбракованных при производстве новых процессоров по 5 баксов штука и собрали на их основе довольно мощный работоспособный кластер.

    сам же написал, что:
    Сам же признаёшь, что узкие места сам создал. Когда что-то пишешь, сразу думай о том - как это неправильно может сработать и что за собой повлечёт и придумывай механизм проверки. Ну или тестировщикам, это оставляй.

    P.S. Мне с течением времени, всё больше кажется что так и надо поступать, как на Тагоре...
     
  6. chibit

    chibit Life sucks.

    Регистр.:
    4 дек 2007
    Сообщения:
    420
    Симпатии:
    285
    Проблема архитектуры - как-нибудь начнем, а потом допишем и будет все заебись. Но костылей становится все больше, поддерживать уже практически невозможно (я не буду фиксить этот баг, иначе вдруг что-нибудь сломается!). А, напишем тесты! Баг пофиксил, тесты прошли удачно, ничего не сломалось вроде. И вот итог, SQL injection. Поздравляю, ты Code monkey.
     
  7. Mendel

    Mendel

    Регистр.:
    27 янв 2008
    Сообщения:
    217
    Симпатии:
    64
    Комментарий не по сути был, на то и жалуюсь. :)
    Я написал, что в 90% случаев оно работает благодаря тому, что я такую возможность предусмотрел, а потом забыл...
    Такое часто бывает, особенно если берешься за код которому много лет. Я сейчас ORM пишу. API у меня весь свежий, а внутрянка на 70% состоит из кода шестилетней давности, который я все переправлял, да перекопировал из движа в движок.... Вот там точно хер просцышь что зачем. Есть куча кода который я не удаляю, хотя вроде как "уже не актуально", просто потому что шесть лет назад я его не прокомментировал, и мне кажется, что оно может быть что-то да решает, а то что не вредит так точно....
    угу. Предусмотри мне такую ситуацию как я описал в топике :)
    Вот как ТАКОЕ можно было предсказать?
    Пиши более "грамотный" код, вот и всё.....

    На хабре пишут "Модульные тесты". Так на что тут тестировать то?
     
  8. _sergey_

    _sergey_ Писатель

    Регистр.:
    1 окт 2008
    Сообщения:
    1.744
    Симпатии:
    1.154
    Ну так, сам же говоришь, это из-за того что не прокомментировал подробно код. Были бы комментарии, прочитал бы их и вспомнил что и как.

    Распространённая проблема. Думаешь никогда не забудешь, а проходит 2-3 года...
     
  9. Mendel

    Mendel

    Регистр.:
    27 янв 2008
    Сообщения:
    217
    Симпатии:
    64
    Ну это да.... но те случаи как раз таки работают.
    А свой код более шести лет которому я таки повыкидывал, и переписал заново.
    С этим то как раз все понятно.
    Ты вот предусмотри именно ту ошибку которую я описал, а именно - отработку условия без плейсхолдера.
    Тестами то здесь не поможешь, это надо более правильно писать было....
    Но блин, не карты карно же рисовать для модулей пропитанных ифами.....
     
  10. _sergey_

    _sergey_ Писатель

    Регистр.:
    1 окт 2008
    Сообщения:
    1.744
    Симпатии:
    1.154
    Раз нельзя предусмотреть, то делай какую-то дополнительную общую защиту от инъекций на случай, если есть такие ошибки. На хабре надо было бы размещать эту тему.