Проблема с md5 & mysql

Unkind

Новичок
Автор оригинала: Wicked не содержит, но ИМХО это не повод не экранировать. Потому что в один прекрасный прекрасный момент можно сменить хэш-функцию на другую (например, на тот же md5( , true)), и придется переделывать все места составления запросов.
Во-первых при смене типа криптования вообще придется все хеши в базе менять.
Во-вторых, экранирование нужно для того, чтобы информация была корректно обработана каким-либо интерпретатором/парсером (PHP, интерпретатор запросов MySQL и т.д.) Вы же после получения хеша будете иметь строку, которая не будет содержать никаких символов, которые могут быть некорретно обработаны MySQL, если, естественно, сам запрос будет корректный.
Так какие символы Вы экранируете перед хешированием? И для чего? И где логика?
 

Wicked

Новичок
Спасибо, что просветили меня, что такое экранирование, и зачем оно нужно :)

Я согласен, что в конкретном случае экранирование хэша не имеет эффекта. Но я не делаю особых различий между этим случаем и случаем следующим:
допустим у нас есть скрипт, который берет введенный пользователем юзернейм и удаляет прямо на входе из него всё, что не [a-z0-9]. В этом случае мы тоже можем не экранировать кавычки, потому что они все равно не пройдут этот фильтр. Но, если у нас со временем поменяется логика приложения и мы, например, разрешим использовать кавычки, это приведет к тому, что в базу может просочиться бяка.

Поэтому я и предпочитаю отделять мух от котлет, и, возможно, сделал бы это даже в случае с md5. Хотя это персональное дело каждого.

Стало понятней, о чем я говорю?

ПС: благо плейсхолдеры в PDO особо не интересуются происхождением и областью значений строковых данных, и не делают никаких поблажек.

ППС:
Во-первых при смене типа криптования вообще придется все хеши в базе менять.
Как я и говорил, при смене хекс-мд5 на бинарный достаточно сделать:
php: md5(?) -> md5(?, true);
mysql: update users set passwd = unhex(passwd); :)
а места формирования запросов, увы, остаются уязвимыми.
 

Unkind

Новичок
Вы пытаетесь мне доказать, что при смене логики скрипта придется менять код? Умно. Очень умно.
Ради того, что когда-нибудь кому-то понадобиться заменить MD5-хеширование на другое, где есть символы, которые могут изменить логику запроса, Вы готовы гадить скрипт СЕЙЧАС. А может логичнее сделать экранирование после смены типа криптования? Или Вы каждый день ее меняете?
 
Сверху