Как защитить веб-приложение ASP .NET от XSS, сохранив введенные данные? - PullRequest
0 голосов
/ 09 марта 2011

Мы с коллегами обсуждали, как лучше защитить себя от атак XSS, но все еще сохраняют введенные символы HTML в поля нашего программного обеспечения.

Для меня идеальным решением является принятие данных (отключите ASP .NET запрос проверки), как пользователь вводит его, выбросить в базу данных именно так, как они вошли в него. Затем всякий раз, когда вы отображаете данные на веб, HTML-кодировать его. Проблема с этим подходом состоит в том, что есть высокая вероятность того, что разработчик где-нибудь когда-нибудь забудет HTML-кодирование отображения значения где-либо. Бам! XSS уязвимость.

Еще одно решение, которое было предложено, - отключить проверку запросов. и исключить любые HTML-пользователи, введенные до того, как они будут сохранены в базе данных используя регулярное выражение. Разработчикам все равно придется кодировать HTML-объекты для отображения, но так как вы удалили все теги HTML, даже если разработчик забудет, мы думаю, это будет безопасно. Недостатком является то, что пользователи не могут войти HTML-теги в описания и поля и вещи, даже если они явно хотите, или они могут случайно вставить в адрес электронной почты окруженный <> и регулярное выражение не берет его ... что угодно. Это винты с данными, и это не идеально.

Другая проблема, которую мы должны помнить, заключается в том, что система была построен на страхе приверженности какой-либо одной стратегии вокруг этого. А также в какой-то момент некоторые разработчики написали несколько страниц в HTML кодировать данные перед попадает в базу данных Так что некоторые данные могут быть уже HTML закодированы в базе данных, некоторых данных нет - это бардак. Мы не можем действительно доверять любым данным, которые поступают из базы данных как безопасные для отображения в браузере.

Мой вопрос: что было бы идеальным решением, если бы вы создание веб-приложения ASP .NET с нуля, и что было бы хорошо подходить к нам, учитывая нашу ситуацию?

Ответы [ 2 ]

2 голосов
/ 09 марта 2011

Использование регулярных выражений для удаления html довольно легко победить и очень трудно получить правильно.Если вы хотите очистить ввод HTML, лучше использовать фактический синтаксический анализатор для обеспечения строгого соответствия XML.

В этой ситуации я хотел бы сохранить два поля вбаза данных: clean и raw для данных.Когда пользователь хочет редактировать свой контент, вы отправляете ему необработанные данные.Когда они отправляют изменения, вы очищаете их и сохраняете в поле clean.Разработчики тогда только когда-либо используют поле clean при выводе контента на страницу.Я бы даже зашел так далеко, что назвал необработанное поле dangerousRawContent, поэтому очевидно, что при обращении к этому полю следует соблюдать осторожность.

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

1 голос
/ 09 марта 2011

Предполагая, что вы продолжите и сохраните HTML-код непосредственно в базе данных, в ASP.NET/MVC Razor HTML-кодирование выполняется автоматически, поэтому вашему небрежному разработчику придется действительно выйти за рамки служебного долга, чтобы представитьXSS.Со стандартными веб-формами (или механизмом просмотра веб-форм) вы можете заставить разработчиков использовать синтаксис <%:, который будет выполнять то же самое.(хотя и с большим риском, что разработчик проявит небрежность)

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

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