Home > Вне категорий > Безопасное квотирование

Безопасное квотирование

April 24th, 2012 Leave a comment Go to comments

В продолжение темы 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(). Потому как ваша проверка, ручная всегда будет более точной.

Categories: Вне категорий Tags:
  1. Lucus
    April 24th, 2012 at 21:24 | #1

    Если использовать классовую структуру, то самый идеальный вариант в логике фильтровать данные, и на уровне работы с базой автоматически escape’ить.
    Используя те же плейсхолдеры, как в DbSimple – ?s, ?d – можно вызывать фильтр данных на уровне базы, без escape’a.

  1. No trackbacks yet.