Возможно ли иметь поддержку компилятора (безопасность типов), чтобы избежать двойного кодирования для анти-XSS во время веб-разработки? - PullRequest
0 голосов
/ 03 октября 2010

Возможно ли иметь поддержку компилятора для принудительной очистки данных (XSS-кодирование)?

Этот вопрос заставил меня задуматься о двойном кодировании и других случаях, когда необходимо кодирование.Похоже, что он отлично работает для Linq, но, возможно, мне может понадобиться эта функция и в других сценариях.

Microsoft AntiXSS - есть ли необходимость в декодировании?

Ответы [ 2 ]

3 голосов
/ 03 октября 2010

Да, учитывая систему типов, которая является выразительной и достаточно мощной, это действительно возможно.

Ur / Web , например, это фреймворк веб-приложения, написанный на языке программирования Ur, в котором система типов гарантирует несколько интересных свойств:

  • не может быть неработающих ссылок (в приложении)
  • невозможно сгенерировать неверный HTML
  • невозможно проводить XSS-атаки
  • SQL-инъекция невозможна
  • поля формы всегда имеют соответствующий обработчик на стороне сервера
  • AJAX-вызовы всегда имеют соответствующий серверный обработчик
  • типы полей формы на стороне клиента, серверных обработчиков и таблиц базы данных совпадают
  • ... намного больше ...

Адам Члипала, автор Ur и Ur / Web, рассказал об этом в лагере Emerging Languages ​​2010 .

Есть также некоторые веб-фреймворки в Haskell, OCaml и Scala, которые (пытаются) это сделать (некоторые из них). Их системы типов достаточно мощные, чтобы гарантировать хотя бы некоторые из этих свойств. Есть, например, безопасное встраивание SQL в Haskell или язык шаблонов HTML в OCaml, который не позволяет пользователю генерировать недопустимый HTML.

0 голосов
/ 03 октября 2010

В момент повторного представления это касается пользовательского интерфейса, поскольку только пользовательский интерфейс знает, какова цель (и, следовательно, соответствующее кодирование).Поэтому я не уверен, как вы могли бы сделать это на уровне language - или в LINQ (будучи компонентом доступа к данным).Тем не мение;в ASP.NET MVC2 MvcHtmlString (который предназначен для представления безопасной html-строки) дает некоторый способ обеспечить это вместе с новым синтаксисом <%:foo%>, который автоматически кодируется при необходимости, но1007 * без двойного кодирования .

...