2015-11-28 3 views
1

Я просто работаю над тем, чтобы обеспечить безопасность моей системы до ее выхода в эфир. Таким образом, я добавляю функцию для проверки входных данных. Я нашел это здесь, на веб-сайте w3c, так как я провел некоторое исследование о том, что лучше всего.Проверка данных на основе данных в PHP

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 

Поскольку большинство материалов хранится в базе данных, мне также нужен MySql Escape, который я уже реализовал. Теперь я хотел бы объединить это, и мне просто интересно, в каком порядке я выполняю эти шаги. Он уверен, имеет смысл trim сначала, но после этого? Im специально не уверенный abot stripslashes и MySql Escape как своего рода самообращение?

Было бы здорово, если бы у кого-то с большим опытом можно было пролить свет на него для меня!

Редактирование 1: Что такое числовые входы - достаточно ли для тестирования с is_numeric()?

+0

Не используйте функции 'mysql_' больше. Используйте функции 'mysqli' или' PDO'. Затем используйте параметризованные запросы. – chris85

+0

@ chris85 Хорошо, я думал об этом раньше, но я мог бы пересмотреть его, поскольку это похоже на будущее, поскольку я только видел, что он будет удален в PHP 7 – guest

ответ

1

Вы правы, чтобы подтвердить свои данные. Однако, не зная, какова цель данных, невозможно дать рекомендации о том, как ее проверить. Валидация & Безопасность ввода - это правильное применение принципов, а не какой-либо определенный набор кода, который устраняет все возможные проблемы. Если бы это было так просто, 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, спросите о С.О. если вы боретесь с конкретным сценарием ввода. Применяйте уроки и контролируйте свое приложение в реальном мире. Не просто предположите, что это будет безопасно, и вы пройдете долгий путь, чтобы избежать боли. & смущение для исправления взломанной системы.

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