2013-07-02 4 views
3

Есть ли встроенная поддержка для проверки вредоносного ввода в веб-API, аналогичного формам с MVC?Поддержка Xss - ASP.Net web api

Если нет, может ли кто-нибудь предложить «глобальный» фильтр/сообщение инспектор/что бы проверить на наличие вредоносного ввода? Я пытаюсь избежать проверки всех моих моделей/параметров по отдельности ...

+0

Какого рода вредоносный ввод валидации вы имеете в виду в ASP.NET MVC? Является ли это проверкой проверки антифиргии? –

+0

Атрибут ValidateInput и базовая инфраструктура asp.net для этого ... – drogon

ответ

6

Нет, я не верю, что есть такая поддержка. Вот почему. Поддержка проверки ввода с помощью Web Forms/MVC была временной мерой. Но вывод кодировки - лучшее исправление XSS; проверка ввода не работает отлично, так как какой-то ввод «плохой» зависит от того, как вы его выведете (как часть источника элемента HTML, как часть источника JS, в значение атрибута HTML, как часть SQL-запроса , и т.д.).

Так что я бы рекомендовал против универсальной глобальной проверки ввода в качестве решения проблем XSS. Вместо этого убедитесь, что вы всегда кодируете вход правильно, прежде чем выводить его (или передавать его на другой уровень, например SQL DB). Для вывода, если вы используете обычные механизмы веб-API для возврата данных (классы моделей с согласованием контента/форматировщиками), форматировщики должны обрабатывать кодировку типа контента для вас.

+1

Спасибо за ответ. Ну, это несчастливо. Несоответствие между веб-api и mvc может расстраивать, потому что у обоих у них так много общего. Хотя глобальная проверка ввода не может быть лучшим решением во всех случаях, я бы сказал, что это будет предпочтительным решением для большинства приложений. Не предоставление какого-либо решения вообще похоже на полицейский :) – drogon

5

Я считаю, что XSS не имеет отношения к веб-API ASP.NET. Вот почему я так думаю. Предположим, что в теле запроса я получил JSON, подобный этому "input": "<script>alert('hello');</script>", и веб-API хранит «ввод», который привязан к некоторому свойству as-is в базе данных и получает его как есть в последующем запросе GET и отправляет его к клиенту, все равно все в порядке. Клиент несет ответственность за правильное экранирование этих данных. Таким образом, когда это свойство ввода сериализуется, чтобы сказать веб-приложение, перед тем, как он записывается в браузер, клиентское веб-приложение должно кодировать HTML. Веб-API, делающий это, как правило, не имеет смысла, поскольку веб-API может быть использован другими клиентами, например, приложение WPF, где XSS может быть неприменимым. Или я пропускаю какой-либо конкретный случай, который вы имеете в виду?

0

Почему вы не используете HttpUtility.HtmlEncode?

+2

Правильно, но как это глобальное решение? Мне все равно придется вызывать HtmlEncode для каждого свойства строки. – drogon

0

Ввод должен быть всегда должен быть валидирован. Неважно, куда он идет. Поле имени должно возвращать строку имени, а не файл jpeg или, например, в зависимости от вашей среды - атаку SQL.

+0

, пожалуйста, проверьте этот URL-адрес (http://stackoverflow.com/help), это будет полезно для повышения качества вашего контента. –

+0

Это определенно должно быть проверено. Тем не менее, недостает базовой проверки xss в рамках. Разработчики должны делать это повторно в коде. – drogon