Я сохраняю отправленный пользователем HTML (в базе данных). Я должен предотвратить атаки с помощью Javascript. Самый пагубный, который я видел, - это script в стиле = "выражение (...)".
В дополнение к этому, справедливое количество допустимого содержимого пользователя будет включать специальные символы и XML-конструкции, поэтому я бы хотел, если возможно, избегать применения белого списка. (Список всех допустимых элементов HTML и атрибута).
Примеры строк атаки Javascript:
1)
"Привет, у меня есть <script> предупреждение ("! Плохо ") </script> проблема с < собакой > элемент..."
2)
"Привет, это & lt; b стиль =" ширина: выражение (предупреждение ( 'плохо!')) " > собака </б > черный".
Есть ли способ предотвратить такой Javascript и оставить его неповрежденным?
Единственное решение, которое я имею до сих пор, - использовать регулярное выражение для удаления определенных шаблонов. Он решает случай 1, но не случай 2.
Edit: Извините, забыли упомянуть об окружающей среде - это, по сути, стек MS:
- SQL Server 2005
- С# 3.5 (ASP.NET)
- Javascript (очевидно) и jQuery.
Я хотел бы, чтобы chokepoint был уровнем ASP.NET - любой может создать плохой HTTP-запрос.
Изменить 2:
Спасибо за ссылки всем. Предполагая, что я могу определить свой список (он будет содержать множество математических и программирующих конструкций, поэтому белый список будет очень раздражать). У меня все еще есть вопрос:
Какой парсер позволит мне просто удалить "плохие" части? Плохая часть может быть целым элементом, но тогда, что об этих сценариях, которые находятся в атрибутах. Я не могу удалить < a hrefs > willy-nilly.