Безопасное квотирование
В продолжение темы habrahabr.ru/post/142599…
Кроме проверки цифровых данных посредством приведения их функциями intval() и floatval(), есть случаи когда не стоит использовать mysql_real_scape_string().
Приведу пару примеров.
Логины, например при авторизации. Практически везде пространство логинов ограничено определенным набором символов. Например у нас разрешены латинские буквы и цифры в логине. Кроме того логин не должен быть длиннее 8 символов. Тогда прежде чем использовать введенную пользователем строку в запросе стоит выполнить следующий простой код:
$login = preg_replace("#[^a-z0-9]#i", "", $login); $login = substr($login, 0, 8);
Ключи – разнообразные ключевые строки, напимер хеши md5 и sha1, которые используются как ключ при восстановлении пароля или подтверждении регистрации из E-mail. Хеши опять же имеют известную длинну и набор символов. Так что к ним можно применить предыдущий код соответственно его модифицировав.
К чему я все это пишу – к тому что если вы можете предвидеть структуру значения поля, её надо проверять избегая mysql_real_scape_string(). Потому как ваша проверка, ручная всегда будет более точной.
Если использовать классовую структуру, то самый идеальный вариант в логике фильтровать данные, и на уровне работы с базой автоматически escape’ить.
Используя те же плейсхолдеры, как в DbSimple – ?s, ?d – можно вызывать фильтр данных на уровне базы, без escape’a.