лучший способ предотвращения атаки xss - PullRequest
3 голосов
/ 26 июня 2011

Какой из двух способов является лучшим способом предотвращения атаки xss?

  1. HTMLEntities при сохранении в дБ
  2. HTMLEntities при отображении / отражении

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

Ответы [ 4 ]

6 голосов
/ 26 июня 2011

Какой из этих двух способов лучше предотвратить атаку xss.

  1. HTMLEntities при сохранении в дБ
  2. HTMLEntities при отображении / отражении

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

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

Вы можете забыть и при вставке в базу данных.

Кроме того, не все данные попадают в базу данных. например Предварительный просмотр данных, которые должны быть вставлены, или данные, возвращаемые в форму из-за ошибок, являются возможными векторами XSS. Вы не хотите иметь дело с такими вещами, как «Кодировать перед помещением в базу данных или при возвращении в документ, если он не пришел из базы данных». Исключения - это лучший способ оказаться в ситуации, когда вы забудете кодировать.

1 голос
/ 26 июня 2011

Лучший способ (вариант № 3 ..), если вы спросите меня, - использовать новейшее расширение filter для фильтрации для вас (PHP5). Мне нравится помещать filter_input_array вверху моего php-файла, чтобы защитить себя, например, от атак POST XSS

$_POST  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

Вы должны прочитать документацию по фильтру (руководства) и защитить себя от XSS для ввода.

0 голосов
/ 26 июня 2011

Причины кодирования в коде дисплея (т. Е. После чтения текста из базы данных):

  • База данных может просматриваться в графическом интерфейсе, не основанном на HTML, который потребует модификации.Изменение универсальных инструментов администрирования базы данных для автоматического декодирования определенного текста (в каком наборе символов?) Для одного приложения не представляется ни возможным, ни желательным.
  • Неправильное кодирование HTML означает, что вам придется доверять базе данных, чтобы она была безопасной,Если когда-либо обнаружится уязвимость - непосредственно в базе данных или в другом веб-приложении, ваше приложение также станет уязвимым.
  • Хранение закодированного HTML в базе данных препятствует поиску;Вы не можете напрямую использовать специальные библиотеки поиска, такие как Lucene.Кроме того, поскольку html-кодирование не может быть биективным, полнотекстовый поиск должен либо работать с декодированной копией базы данных, либо декодировать все записи в базе данных, что приводит к производительности O (размер базы данных).
  • Будущие переходы кодированиятакже намного проще, если весь код кодирования сконцентрирован в коде дисплея.
  • Кодирование увеличивает занимаемое пространство памяти

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

0 голосов
/ 26 июня 2011

Лучшим способом было бы strip_tags() и htmlentities() перед сохранением в дБ (если вы не возражаете против некоторых дополнительных бит данных).

Однако убедитесь, что вы приняли и другие меры предосторожности.для защиты от внедрения SQL с помощью mysql_real_escape_string() или подготовленного уровня абстракции доступа к данным оператора, такого как PDO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...