Я сохраняю пользовательский HTML (в базе данных). Я должен предотвратить атаки инъекций Javascript. Самым пагубным из всех, что я видел, является сценарий в стиле = "expression (...)".
В дополнение к этому, достаточное количество действительного пользовательского контента будет включать в себя специальные символы и конструкции XML, поэтому я хотел бы по возможности избегать подхода из белого списка. (Перечисление каждого допустимого элемента и атрибута HTML).
Примеры строк атаки Javascript:
1)
"Здравствуйте, у меня есть
предупреждение ( "плохой!")
проблема с
элемент ... "
2)
"Привет, это собака
черный. "
Есть ли способ предотвратить такой Javascript и оставить остальные нетронутыми?
Единственное решение, которое у меня есть, это использование регулярного выражения для удаления определенных шаблонов. Это решает случай 1, но не случай 2.
Edit:
Извините, забыл упомянуть окружение - по сути это стек MS:
- SQL Server 2005
- C # 3.5 (ASP.NET)
- Javascript (очевидно) и jQuery.
Мне бы хотелось, чтобы точка доступа была слоем ASP.NET - любой может создать неверный HTTP-запрос.
Редактировать 2:
Спасибо всем за ссылки. Предполагая, что я могу определить свой список (он будет содержать много математических и программных конструкций, поэтому белый список будет очень раздражающим) У меня все еще есть вопрос:
Какой парсер позволит мне просто удалить "плохие" части? Плохая часть может быть целым элементом, но как насчет этих сценариев, которые находятся в атрибутах. Я не могу удалить волей-неволей.