Как избежать межсайтового скриптинга в ASP.NET

У меня есть форма ASP.NET с текстовым полем. Пользователь может вводить любые символы, цифры и т. Д. Я не должен ограничивать пользователя фильтрацией опасных символов. Но мне нужно предотвратить межсайтовый скриптинг.

Пользователь может ввести любой текст, например, предупреждение («привет»).

Данные должны быть сохранены как их в БД. Также он должен быть возвращен и отображен в ярлыке в том виде, в каком он есть.

Как этого добиться без межсайтового скриптинга


person web dunia    schedule 03.05.2011    source источник


Ответы (1)


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

Затем способ предотвратить XSS - это кодировать значение всякий раз, когда вы его отображаете. Для этого существует множество способов, но использование класса AntiXSS в Microsoft Web Protection Library является наиболее оптимальным решением. лучше, если вы спросите меня. Вы можете кодировать вывод в зависимости от того, отображаете ли вы его в элементах HTML, атрибутах, JavaScript и т. Д.

person John Bledsoe    schedule 03.05.2011
comment
Я не хочу выбирать первый вариант. Я хорошо владею вторым. если кодировать ‹, это сохраняется как & lt в БД. Я хочу отображать ‹при извлечении. как я могу? - person web dunia; 03.05.2011
comment
@web dunia, где вы результат показываете? Браузеры будут отображать $lt; как <, если только это не текстовое поле или что-то в этом роде. - person Petey B; 03.05.2011
comment
Кодирование перед сохранением в базе данных - плохая идея, поскольку не учитывает, где вы собираетесь выводить значение. Вам нужны разные кодировки в зависимости от того, выводите ли вы значение, например, в элементе HTML или в атрибуте HTML. - person John Bledsoe; 03.05.2011