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

Mendel

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

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

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

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

ТЕОРИЯ ОШИБОК В. ТИХОНОВА:D

Ошибки так же неисчерпаемы, как и атом. Аксиома. В любой программе есть ошибки. Число ошибок, которые нельзя обнаружить, бесконечно, в противовес числу ошибок, которые можно обнаружить,- оно конечно по определению.

Чем более программа необходима, тем больше в ней ошибок. Следствие. Ошибок не содержит лишь совершенно ненужная программа.

Никогда не исправляйте найденные ошибки, ибо это повлечет за собой появление неизвестного числа ненайденных. Лучше опишите их в сопроводительной документации как особенность программы. До начала работы над проектом следует тщательно продумать все необходимые ошибки и связи между ними. Это значительно упростит работу над ошибками в самом проекте.
 
PS: Да телепортнётся сия философская беседа в Мегафлуд...
Спасибо что убили тему. Закройте плиз, а то либо я в этом движке не вижу как, либо мне еще не подняли Левел до закрытия своих тем.
 
Спасибо что убили тему. Закройте плиз, а то либо я в этом движке не вижу как, либо мне еще не подняли Левел до закрытия своих тем.
Эта функция юзерам сейчас недоступна.

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

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

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

P.S. Мне с течением времени, всё больше кажется что так и надо поступать, как на Тагоре...
Стругацкие: Тагоряне. Цивилизация гипертрофированной предусмотрительности. Три четверти всех мощностей направлено у них на изучение вредных последствий, каковые могут проистечь из открытия, изобретения, нового технологического процесса и так далее.
 
Если реализацию сложно объяснить — идея плоха.
Если реализацию легко объяснить — идея, возможно, хороша.
Проблема архитектуры - как-нибудь начнем, а потом допишем и будет все заебись. Но костылей становится все больше, поддерживать уже практически невозможно (я не буду фиксить этот баг, иначе вдруг что-нибудь сломается!). А, напишем тесты! Баг пофиксил, тесты прошли удачно, ничего не сломалось вроде. И вот итог, SQL injection. Поздравляю, ты Code monkey.
 
А по сути на что ты жалуешься? Мегафлуд более посещаем.
Комментарий не по сути был, на то и жалуюсь. :)
сам же написал, что:
Сам же признаёшь, что узкие места сам создал. Когда что-то пишешь, сразу думай о том - как это неправильно может сработать и что за собой повлечёт и придумывай механизм проверки. Ну или тестировщикам, это оставляй.
Я написал, что в 90% случаев оно работает благодаря тому, что я такую возможность предусмотрел, а потом забыл...
Такое часто бывает, особенно если берешься за код которому много лет. Я сейчас ORM пишу. API у меня весь свежий, а внутрянка на 70% состоит из кода шестилетней давности, который я все переправлял, да перекопировал из движа в движок.... Вот там точно хер просцышь что зачем. Есть куча кода который я не удаляю, хотя вроде как "уже не актуально", просто потому что шесть лет назад я его не прокомментировал, и мне кажется, что оно может быть что-то да решает, а то что не вредит так точно....
P.S. Мне с течением времени, всё больше кажется что так и надо поступать, как на Тагоре...
угу. Предусмотри мне такую ситуацию как я описал в топике :)
Вот как ТАКОЕ можно было предсказать?
Пиши более "грамотный" код, вот и всё.....

На хабре пишут "Модульные тесты". Так на что тут тестировать то?
 
угу. Предусмотри мне такую ситуацию как я описал в топике
Ну так, сам же говоришь, это из-за того что не прокомментировал подробно код. Были бы комментарии, прочитал бы их и вспомнил что и как.

Распространённая проблема. Думаешь никогда не забудешь, а проходит 2-3 года...
 
Ну это да.... но те случаи как раз таки работают.
А свой код более шести лет которому я таки повыкидывал, и переписал заново.
С этим то как раз все понятно.
Ты вот предусмотри именно ту ошибку которую я описал, а именно - отработку условия без плейсхолдера.
Тестами то здесь не поможешь, это надо более правильно писать было....
Но блин, не карты карно же рисовать для модулей пропитанных ифами.....
 
Ну это да.... но те случаи как раз таки работают.
А свой код более шести лет которому я таки повыкидывал, и переписал заново.
С этим то как раз все понятно.
Ты вот предусмотри именно ту ошибку которую я описал, а именно - отработку условия без плейсхолдера.
Тестами то здесь не поможешь, это надо более правильно писать было....
Но блин, не карты карно же рисовать для модулей пропитанных ифами.....
Раз нельзя предусмотреть, то делай какую-то дополнительную общую защиту от инъекций на случай, если есть такие ошибки. На хабре надо было бы размещать эту тему.
 
Назад
Сверху