Вы правы, чтобы подтвердить свои данные. Однако, не зная, какова цель данных, невозможно дать рекомендации о том, как ее проверить. Валидация & Безопасность ввода - это правильное применение принципов, а не какой-либо определенный набор кода, который устраняет все возможные проблемы. Если бы это было так просто, SQL-инъекция не была бы верхней частью OWASP top 10.
Что вы должны делать, это всегда обеспечивать соответствие данных тем, что вы ожидаете. Например, текстовая строка в числовом поле может привести к тому, что ваш код совершит непредвиденные действия. PHP имеет множество функций, которые могут использоваться для проверки. is_numeric
, strlen
и preg_match
- регулярные выражения отлично подходят для проверки дат, почтовых индексов и множества других входных данных.
Я не уверен, почему вы используете stripslashes
, esp. когда речь идет о запросах базы данных. Когда-то было принято использовать addslashes
, так что PHP имел magicquotes автоматически addslashes
на всех входах. Стоит прочитать those pages of the manual, так как они охватывают вопросы одеяла, меняющие все входные данные очень хорошо.
Второе, что нужно сделать, это решить, как вы хотите обрабатывать ввод, который не соответствует ожиданиям. Возможно, стоит зарегистрировать ошибки, чтобы вы могли разрешить любые проблемы с вашим интерфейсом. Вы собираетесь сообщить пользователю, что возникла проблема с вводом?
Заключительная мысль по вашему вопросу, вы спрашиваете о проверке ввода, но stripslashes
и htmlspecialchars
оба изменяют ввод. Это может привести к возникновению проблем позже, например, если вам понадобятся косые черты в ваших входных данных для некоторых случаев использования или вход - изображение, а не текст.
Иметь различную проверку для разных типов ввода. При необходимости используйте код кодирования/экранирования. Например. mysqli->real_escape_string
перед вставками db и htmlspecialchars
перед использованием данных в выводе xhtml.
Прочитайте этот вопрос, узнайте OWASP top 10, спросите о С.О. если вы боретесь с конкретным сценарием ввода. Применяйте уроки и контролируйте свое приложение в реальном мире. Не просто предположите, что это будет безопасно, и вы пройдете долгий путь, чтобы избежать боли. & смущение для исправления взломанной системы.
Не используйте функции 'mysql_' больше. Используйте функции 'mysqli' или' PDO'. Затем используйте параметризованные запросы. – chris85
@ chris85 Хорошо, я думал об этом раньше, но я мог бы пересмотреть его, поскольку это похоже на будущее, поскольку я только видел, что он будет удален в PHP 7 – guest