Вы HtmlEncode во время ввода или вывода? - PullRequest
3 голосов
/ 14 ноября 2008

Когда вы звоните Microsoft.Security.Application.AntiXss.HtmlEncode? Вы делаете это, когда пользователь отправляет информацию, или вы делаете, когда вы отображаете информацию?

Как насчет основных вещей, таких как имя, фамилия, город, штат, почтовый индекс?

Ответы [ 4 ]

12 голосов
/ 14 ноября 2008

Вы делаете это, когда отображаете информацию. Сохраните оригинал, как он был введен, конвертируйте его для отображения на веб-странице. Допустим, вы отображали его другим способом, например, экспортировали его в Excel. В этом случае вы хотите экспортировать сохраненный оригинал.

Кодировать каждую строку.

4 голосов
/ 14 ноября 2008

Вы должны кодировать или экранировать свои данные только в самый последний момент, будь то непосредственно перед тем, как поместить их в базу данных, или отобразить их на экране. Если вы закодируете слишком рано, вы рискуете случайно удвоить кодирование (вы часто будете видеть & на сайтах новичков - включая меня).

Если вы хотите кодировать раньше этого, тогда примите меры, чтобы избежать двойного кодирования. Джоэл написал статью о хорошем использовании венгерской нотации, где он высказался за использование префиксов для определения того, что хранится в переменной. Например: «us» для небезопасной строки, «ss» для безопасной строки.

usFirstName = getUserInput('firstName')

ssFirstName = cleanString(usFirstName);

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

2 голосов
/ 14 ноября 2008

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

Вместо этого мы решили санировать ввод на пути в систему, поскольку входных точек было меньше, чем выходных. Мы выполняем санитарную обработку непосредственно перед вводом данных в БД, хотя мы не используем библиотеку Microsoft AntiXss, мы используем набор методов домашнего пивоварения, которые вносят в белый список диапазоны тегов и символов HTML в зависимости от типа ввода.

Если вы разрабатываете систему с нуля или у вас есть система, которая достаточно мала (или хорошо управляется) для кодирования выходных данных, следуйте совету Кори. Это определенно лучший способ сделать это.

1 голос
/ 24 ноября 2009

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

Этот принцип справедлив, независимо от того, является ли ваш транспортный механизм HTML, HTTP, дымовыми сигналами и т. Д. Хитрость заключается в том, чтобы знать, как выполнять типы кодирования вручную, и когда различные платформы выполняют шаги за вас автоматически. Например, ASP.NET будет кодировать данные, присвоенные тексту System.Web.UI.WebControls.Button, но не текст, присвоенный тексту System.Web.UI.WebControls.Literal. jQuery будет кодировать контент, который вы устанавливаете с помощью .innerText (), но не контент, который вы устанавливаете с помощью .innerHtml ().

...