Предотвращение эксплойтов XSS с использованием системы типов, как предложил Джоэл - PullRequest
5 голосов
/ 22 июня 2009

В Подкаст 58 (около 20 минут) Джефф жалуется на проблемы HTML.Encode(), а Джоэл рассказывает об использовании системы типов для обычных строк и HTMLStrings:

  • Краткая политическая напыщенная речь о злом движках представления, которые не в состоянии HTML кодировать по умолчанию. Проблема с этот выбор дизайна заключается в том, что это не «Безопасный по умолчанию», который всегда неправильный выбор для фреймворка или API. Забудьте закодировать немного введенные пользователем данные в одном вонючее место в вашем веб-приложении и вы будете полностью владеть XSS. Поверь в это. Я знаю, потому что это случилось с нами. Многократно!

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

В комментариях к сообщению в блоге упоминается использование статического анализа для выявления потенциальных слабых мест. расшифровка Wiki еще не завершена.

Возможно ли реализовать предложение Джоэля без новой платформы ASP.NET?

Может ли быть возможно реализовать это просто путем создания подклассов каждого элемента управления и применения новых интерфейсов на основе HTMLString? Если большинство людей уже подклассируют элементы управления, чтобы лучше внедрить специфичные для сайта функциональные возможности, разве это не будет достаточно легко реализовать?

Стоит ли делать это вместо инвестиций в статический анализ?

1 Ответ

2 голосов
/ 27 июня 2009

Чтобы использовать HtmlString везде, вам, по сути, придется переписать каждое свойство и метод каждого веб-элемента управления. System.String запечатан, поэтому вы не можете создать его подкласс.

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

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