2012-01-06 4 views
0

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

Мой сценарий заключается в том, что я собираю адреса электронной почты через форму HTML/jQuery, чтобы эти адреса электронной почты могли использоваться в списке рассылки. На этом этапе из базы данных не будет извлечено из базы данных, поэтому использование JSON, XML и т. Д.

Нужно ли беспокоиться о том, что нужно санировать ввод пользователя или нет? Многие люди, похоже, говорят, что санитария по пути в этом не нужна, в то время как другие говорят, что никогда не следует недооценивать необходимость дезинфекции всякий раз, когда можете.

Есть ли у кого-нибудь мысли, которые сделают это более ясным?

+6

В разработке программного обеспечения существует множество спорных вопросов, но я не знал, что унифицировать ввод пользователя будет один. – JJJ

+2

«Вы никогда не должны недооценивать необходимость дезинфекции, когда можете». – afuzzyllama

+1

Лучше быть в безопасности, чем жалеть, не так ли? Есть ли причина, по которой вы не хотите санировать вход? –

ответ

1

Две вещи важны в данный момент:

  • Обеспечение пользователя не содержит ваши данные: Предотвращение SQL Инъекции

См SQL Injection документацию здесь:

http://php.net/manual/en/security.database.sql-injection.php

  • Подтверждение адреса электронной почты убедитесь, что пользователь сделал ввести правильный адрес электронной почты

http://www.linuxjournal.com/article/9585

+1

Проверка электронной почты является вторым наиболее важным моментом, связанным с санитарной обработкой данных? – ManseUK

+0

Некоторые хорошие статьи - спасибо, что нашли время. – Ryan

1

Всегда делать это. Это займет всего несколько минут вашего времени. На самом деле это не недостаток. Зачем рисковать?

+0

В некоторых случаях санитария может представлять проблемы. Вы меняете данные пользователя. Это действительно зависит от данных и приложения. Санитировать, где санитария относительно низкая, и улучшает вашу жизнь как человека, который должен работать с данными. Для всех остальных проверяйте. – Fleep

0

Все входные данные пользователя должны быть дезинфицированы. Вы не можете доверять пользователю только отправку действительного ввода. Это не так, как работает. Всегда есть кто-то, кто попытается проверить ваш код на наличие слабых мест.

Это касается и адресов электронной почты. Вы должны убедиться, что это действительный адрес электронной почты, прежде чем отправлять его в базу данных.

+0

Валидация! = Санитария. – Fleep

+0

@Fleep: проверка является предварительным условием для санитизации – hakre

+0

@hakre: Это неправда. Бывают случаи, когда вы хотите дезинфицировать до проверки - во многих случаях. Рассмотрим вышеприведенный пример. Предположим, мы получили электронное письмо от ввода. Имеет смысл его дезинфицировать (удалять конечные/ведущие пробелы, делать их строчными) ПРИОР для проверки его (например, пробелы/новые строки не являются законными в сообщениях электронной почты, но пользователь может просто случайно нажать пробел до/после) , Санитарные данные не предназначены для защиты от SQL-инъекций/XSS/CSRF. Это также означает очистку данных, что позволяет использовать их. – Fleep

0

Потребности в санитарии действительно зависят от прецедента и типа данных. Например, вы запрашиваете у пользователя адрес электронной почты. Вероятно, вам нужно будет узнать, существует ли это электронное письмо в вашем списке рассылки. Если вам это не нужно, не проблема. Если вам нужно избегать дубликатов, и ваша система рассылки не поддерживает его собственное чистое удаление, оно обычно безопасно и рекомендуется:

  1. отделка() вход для электронной почты. Ведущие/конечные пробелы не являются значимыми частями электронной почты, поэтому их удаление не представляет никаких рисков, но делает их более надежными и согласованными с e-mail.
  2. strtolower() вход для электронной почты. Электронные письма не чувствительны к регистру, нет реального риска, и он делает сопоставление более надежным/согласованным.
0

проверка ввода относится к процессу проверки все входные к приложению перед его использованием. Валидация ввода абсолютно важна для безопасности приложений, и большинство прикладных рисков связаны с испорченным входом на определенном уровне. Многие приложения не планируют проверку ввода и не оставляют его отдельным разработчикам.Это рецепт катастрофы, поскольку разные разработчики, безусловно, будут выбирать другой подход, и многие просто оставят его в поисках более интересного развития.

Подробнее: Data Validation

1

Санобработка любые и все входные данные, независимо от того, будет ли он использоваться для вывода, это всегда хорошая идея, по той простой причине, что вход и поэтому принят в некотором смысле с помощью кода/компилятора/системы/и т. д. Вам может не понадобиться (по вашим прецедентам) до подтвердить весь ввод (например, это адрес электронной почты в формате адреса электронной почты, а это действительный/рабочий адрес электронной почты), но, по крайней мере, обеспечить минимальный набор методов дезинфекции функции для предотвращения инъекций XSS и SQL.

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