Устранение сбоев в использовании межсетевых экранов & lt; & gt;


2

Я тестирую приложение, которое пропускает только символы < и >. Проверяемый пользователем вход всегда вставлен между тегами html, такими как <b>, <span>, <div> и т. Д. И никогда не передавался на страницу как атрибут. Достаточно ли защиты или есть способ обойти этот фильтр?

Пример:

<a href="http://www.site.com" style="color:white"> 
    UserInput 
</a> 

Привет.

+2

Не снимайте символы, кодируйте их. Или еще лучше, ваша веб-инфраструктура кодирует их автоматически. 13 авг. 132013-08-13 14:54:18

  0

Я согласен с CodesInChaos ... для стоимости разработки, вы можете также выводить кодировку по мере необходимости для контекста, а не иметь слабый процесс всасывания в качестве формы безопасности. Что происходит в будущем, когда пользовательский ввод заканчивается как переменная JavaScript или как поле в теге <input>? 14 авг. 132013-08-14 15:26:17

  0

Не уверен, что я правильно понял проблему, но что, если '$ UserInput = &lt;script&gt; alert (1); &lt;/script & gt'? 09 дек. 132013-12-09 18:59:53

5

Это не является достаточной защитой

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

В вашем случае возможно даже использовать только ampersand encoding для пропуска < и > символов.

В противном случае double encoding может использоваться для обхода ваших фильтров или даже overlong utf-8 sequences (однако этот последний немного устарел, и большинство стеков программного обеспечения не попадают на него).

Это всего лишь несколько примеров, но есть many more способы обхода простых фильтров разметки, подобных вашим. This bit в особенности.

  0

Я пробовал все эти методы, но никто не работал. Также я понял, что < and > не фильтруются только фактические теги html. 13 авг. 132013-08-13 13:53:27

+1

@ Если вы выбросили все с этой страницы OWASP на свой фильтр, то вы, вероятно, довольно хорошо. Однако белый список по-прежнему является предпочтительным. например 'msg.matches (" [\ w \ s] * ")' 13 авг. 132013-08-13 13:59:05


1

О, с чего начать ...

Если есть один принцип безопасности, который проявляет себя снова и снова, и снова это, что черные списки терпят неудачу.

Играйте в длинную игру - убедитесь, что ваше веб-приложение может противостоять ограниченному числу атак, которые вы бросили на него сегодня, но Интернет сможет попробовать тысячи вещей с тысячами других переменных (новый код, различные браузеры, различные языковые наборы и т. д. и т. д.).

«Пользовательский ввод проверяется всегда», - говорит вам сегодня. Что происходит, когда вы переходите, а другой разработчик наследует этот код? Собираются ли они понимать и соблюдать обязательства, взятые вами в голову? Если вы вводите подтверждение ввода и кодирование вывода, вы даете другому парню шанс на бой.

Идите вперед и раздеть "" < сценарий >", что происходит, когда кто-то представляет "" < < экр сценарий > > IPT ""?


0

Кто является обеспечение HREF в URL вы указали здесь:

<a href="http://www.site.com" style="color:white"> 
    UserInput 
</a> 

Если HREF тянут из входного тега. Тогда это всего лишь еще один случай недостаточной фильтрации или ускорения ввода пользователя. Все входные данные пользователя считаются злыми.

Например, если пользователь поставляет URL для этого тега привязки в вашем примере случае, вполне возможно, что это sXSS будет работать и нагрузка на каждой мыши над:

URL: http://www.site.com" onmouseover="javascript:alert(1)" 

Кроме того, вы может изменить onmousover to onload, и теперь вы выполняете свой javascript на каждой загрузке страницы. Отключение DOM-событий из HTML-тегов - еще один способ предотвращения такого типа атаки sXSS.