Безопасность кода при работе с БД

1. Недопущение возможностей для SQL-inject:

Подстановка данных в SQL-запросы ТОЛЬКО через placeholders ("?").

2. Минимизация изменений тела запроса

В особых случаях (если необходимо подставить имя поля или название таблицы) допускается подстановка переменных напрямую в тело запроса, при этом должны быть соблюдены два условия:

  • если подставялется имя таблицы или поля, то оно обязательно заключается в кавычки (для MySQL): `fieldname`,
  • Вы должны быть АБСОЛЮТНО уверены в том, что значения переменных НЕ извлекается напрямую из входных параметров/переменных HTTP-запроса, а генерируется внутри кода и могут принимать только конечное дискретное множество значений.

Пример:

SELECT `$fieldname` FROM `$table`

Для кросс-dbms приложений можно использовать DBI-метод quote_identifier:

my $quoted_fieldname = $dbh->quote_identifier( 'fieldname' );

my $sql = "SELECT $quoted_name FROM mytable";

Вернуться к списку