Если вы выводите контролируемый пользователем ввод в html-контексте, вы можете следить за тем, что делают другие и очищать при обработке ввода (html Очистка, проверка пользовательского ввода) и / или html, кодировать значения перед выводом.
Случаи, когда теги htmlencodng / strip (теги не нужны) недостаточны:
- пользовательский ввод появляется в атрибутах, тогда это зависит от того, всегда ли вы (двойные) цитируете атрибуты или нет (плохие)
- используется в обработчиках * (например, onload = "..), тогда html-кодирование недостаточно, так как синтаксический анализатор javascript вызывается после html-декодирования.
- появляется в разделе javascript - зависит от того, указан ли он в кавычках (кодирование htmlentity недостаточно) или в кавычках (очень плохо).
- возвращается как json, который может быть оценен. Javascript escape требуется.
Кроме того, они не учитывают недостатки браузера, такие как неполный эксплойт UTF-8, эксплойты по типу контента (недоработка UTF-7) и т. Д.
Конечно, вы также должны обрабатывать данные для защиты от других атак (SQL или внедрение команд).