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