XSS действительно сводится к кодированию вывода, то есть к тому, что вы отправляете с сервера на страницу.
Отложив на данный момент другие типы атак с использованием инъекций (например, SQL-инъекцию), пользователь может отправлять вам любые вредоносные данные. Теперь я бы не рекомендовал хранить этот ввод в закодированном виде, так как вы можете захотеть сделать с ним что-то другое (например, поместить его на другой носитель, кроме Интернета). Но когда вы отправляете этот ввод обратно в качестве ответа на веб-запрос, убедитесь, что вы закодировали его . Может случиться так, что единственный пользователь, который может видеть ввод в ответе, является исходным пользователем, который первым поставил ввод, и в этом случае вы можете считать, что кодирование не является необходимым. В любом случае, я бы рекомендовал кодировать его как стандартный подход, так как вы никогда не знаете, когда функциональность приложения может измениться, и другие пользователи теперь могут видеть этот ввод, и вдруг у вас появляется потенциальная уязвимость XSS!
Таким образом, вышеприведенное относится к входу, поступающему из вашей системы. То же самое касается ввода, поступающего из любой другой системы; всегда кодируйте его . Нельзя доверять данным из любого другого источника, кроме того, который вы явно создали сами. С этой точки зрения я считаю, что хорошее начало для смягчения XSS.
Если вы используете MVC 2 в .NET 4, то при использовании <%: Data %>
HTML кодирует Data
с использованием кодера по умолчанию . Если вы не используете .NET 4, вам нужно будет использовать <%= Html.Encode(Data) %>
.