Санитарная обработка HTML затрудняет
Я читаю профили пользователей из базы данных и показываю их. Прежде чем я покажу им, я использую очистку HTML через php htmlentities. Это показывает их правильно. Но, позволяя пользователю редактировать его, он отображается как дважды отфильтрованный.
echo '<input id="about" name="about" value="'.$php_filtered_value>.'">';
Тогда внутри ввода амперсанд будет выглядеть &
Если я не фильтрую переменную, возникает беспокойство по поводу внедрения html.
Что я должен делать?
2 ответа
Я предпочитаю следовать правилу OWASP № 2:
> RULE #2 - Attribute Escape Before Inserting Untrusted Data into HTML
Requirements:
-Aggressive HTML Entity Encoding
-Only place untrusted data into a whitelist of safe attributes (listed below).
-Strictly validate unsafe attributes such as background, id and name.
Пожалуйста, ознакомьтесь с XSS (межсайтовым скриптингом).
Не используйте двойной текст после этого (как в: один раз перед сохранением его в базе данных и еще раз перед его отображением).
- Unescaped (что вы напечатали):
Able & Baker
- Побег один раз (что хранится в БД):
Able & Baker
- Двойное экранирование (что заканчивается в вашем HTML):
Able &amp; Baker
Скорее, экранируйте текст только один раз: обычно на стороне вывода, а не на стороне ввода.