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