Я сохраняю отправленный пользователем HTML (в базе данных). Я должен предотвратить атаки с использованием JavaScript-инъекций. Самое опасное, что я видел, - это JavaScript в style="expression(...)"
.
В дополнение к этому изрядное количество действительного пользовательского контента будет включать специальные символы и конструкции XML, поэтому я бы по возможности избегал подхода с использованием белого списка. (Список всех допустимых элементов и атрибутов HTML).
Примеры строк атаки JavaScript:
1.
"Hello, I have a
<script>alert("bad!")</script>
problem with the <dog>
element..."
"Hi, this <b
style="width:expression(alert('bad!'))">dog</b>
is black."
Есть ли способ предотвратить такой JavaScript и оставить все остальное нетронутым?
Единственное решение, которое у меня есть до сих пор, - использовать регулярное выражение для удаления определенных шаблонов. Он решает случай 1, но не случай 2.
Среда - это, по сути, стек Microsoft:
- SQL Server 2005
- C # 3.5 (ASP.NET)
- JavaScript и jQuery.
Я бы хотел, чтобы узким местом был уровень ASP.NET - любой может создать неверный HTTP-запрос.
Редактировать
Всем спасибо за ссылки. Предполагая, что я могу определить свой список (контент будет включать множество математических и программных конструкций, поэтому белый список будет очень утомительным), у меня все еще есть вопрос:
Какой парсер позволит мне просто удалить плохие части? Плохой частью может быть целый элемент, но как насчет тех скриптов, которые находятся в атрибутах? Я не могу удалить < a hrefs >
волей-неволей.