2014-02-12 3 views
0

Функция filter_var с параметром FILTER_SANITIZE_STRING является приемлемым средством для дезинфекции входов базы данных?Обработка данных формы PHP

Я пользуюсь следующим при получении ввода от формы и хотел бы узнать, считается ли это приемлемой практикой.

Я знаю, что в идеале следует использовать параметризованный интерфейс, но мне любопытно, какие альтернативы при наличии приемлемых альтернатив этому подходу.

$this->fname = filter_var($this->fname, FILTER_SANITIZE_STRING); 
+2

Для дезинфекции данных, поступающих в базу данных. Поскольку вы используете php. Я бы порекомендовал вам использовать первые подготовленные заявления PDO, что снижает риск инъекций sql, а также вы должны использовать методы очистки входных данных на стороне клиента. – Mubo

+0

У меня есть проверка JavaScript на поля формы, но я бы идеально хотел бы иметь еще один слой между формой и базой данных. – morris295

+0

Это кажется мне хорошим. Для серверной стороны при использовании php. PDO и подготовленные заявления действительно хороши до сих пор и выполняют эту работу. Этого должно быть достаточно, я думаю, – Mubo

ответ

1

Я бы сказал, что вы используете PDO и делаете свои вопросы безопаснее, используя подготовленные запросы. PDO Prepared statement

mysql_real_escape_string. функция хороша, но не используйте ее одновременно с функцией addslashes(), они могут конфликтовать друг с другом.

+0

Следует также указать, что мы используем базу данных Microsoft SQL Server. Таким образом, я просто взглянул на документацию PDO на php.net, в которой говорится, что функциональность с MS SQL-сервером является «экспериментальной», в этом случае это не очень желательно. Похоже, PDO отлично справляется с MySQL, но не обязательно SQL Server. – morris295

+0

Я только немного посмотрел документацию и, похоже, PDO также имеет «PDO_ODBC» для использования с системными DSN. Я думаю, что лучше решает то, что я изначально искал. Пожалуйста, проигнорируйте мое предыдущее заявление о PDO и MS SQL Server. – morris295

+0

Я собирался написать вам об этом. PDO - абстракция базы данных php и предназначена не только для Mysql, но и для всех других существующих языков баз данных. Cheers – Mubo

1

Я бы сказал, нет. Он будет вытеснять или кодировать, в зависимости от установленного вами флага, не-строковых символов, однако всегда рекомендуется поддерживать санацию базы данных такими функциями, как mysql_real_escape_string.

Плюс это не принесет никакого вреда наличию дополнительного слоя безопасности.

+0

Это мое понимание ситуации, но точнее проблема, с которой я сталкиваюсь, заключается в том, что мы используем ODBC-соединение для доступа к базе данных Microsoft SQL Server. Не существует эквивалентной функции 'mysql_real_escape_string' с ODBC, насколько мне известно, какой метод лучше использовать при таких обстоятельствах? – morris295

+0

Возможно, это (http://stackoverflow.com/questions/6197828/how-to-sanitize-odbc-database-input)? – Ashley

Смежные вопросы