Является ли XSS проблемой с ASP.NET MVC2 и текстовыми полями HTML? - PullRequest
0 голосов
/ 14 июля 2011

У меня есть веб-сайт интрасети, созданный с использованием ASP.NET с использованием как фреймворка MVC версии 2.0, так и фреймворка Entity.

Один из фрагментов данных, которые меня интересуют, - это Notes.Он хранится в базе данных в виде текста типа.Он сохраняется и загружается с использованием Entity Framework.Он отображается только в Интернете в текстовых полях ввода.Данные на сервере вообще не используются.

Поэтому вопрос заключается в том, представляет ли это опасность XSS, если я отключаю проверку на сервере.И нужно ли беспокоиться о кодировании Notes перед тем, как поместить его в текстовое поле ввода.

КОММЕНТАРИИ 1

Я использую только .NET 3.5.Я молюсь, чтобы это было обновлено в будущем, как только я выйду из Visual Studio 2008;)

Вот как я размещаю заметки на веб-странице.

<%= Html.TextArea("Notes", null, new { rows = "10", style = "width:100%" }) %>

выше - единственный способ размещения заметок на веб-странице.На сервере я делаю что-то вроде (я пропустил оператор where):

var myStruct = (from u in myDB.dbSomeStruct
                select u).FirstOrDefault();
myStruct.Notes = Notes;
myDB.SaveChanges();

1 Ответ

1 голос
/ 14 июля 2011

XSS действительно сводится к кодированию вывода, то есть к тому, что вы отправляете с сервера на страницу.

Отложив на данный момент другие типы атак с использованием инъекций (например, SQL-инъекцию), пользователь может отправлять вам любые вредоносные данные. Теперь я бы не рекомендовал хранить этот ввод в закодированном виде, так как вы можете захотеть сделать с ним что-то другое (например, поместить его на другой носитель, кроме Интернета). Но когда вы отправляете этот ввод обратно в качестве ответа на веб-запрос, убедитесь, что вы закодировали его . Может случиться так, что единственный пользователь, который может видеть ввод в ответе, является исходным пользователем, который первым поставил ввод, и в этом случае вы можете считать, что кодирование не является необходимым. В любом случае, я бы рекомендовал кодировать его как стандартный подход, так как вы никогда не знаете, когда функциональность приложения может измениться, и другие пользователи теперь могут видеть этот ввод, и вдруг у вас появляется потенциальная уязвимость XSS!

Таким образом, вышеприведенное относится к входу, поступающему из вашей системы. То же самое касается ввода, поступающего из любой другой системы; всегда кодируйте его . Нельзя доверять данным из любого другого источника, кроме того, который вы явно создали сами. С этой точки зрения я считаю, что хорошее начало для смягчения XSS.

Если вы используете MVC 2 в .NET 4, то при использовании <%: Data %> HTML кодирует Data с использованием кодера по умолчанию . Если вы не используете .NET 4, вам нужно будет использовать <%= Html.Encode(Data) %>.

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