2008-11-14 3 views
3

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

Как насчет основных вещей, таких как Имя, Фамилия, Город, Штат, Индекс?

ответ

4

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

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

usFirstName = getUserInput('firstName') 

ssFirstName = cleanString(usFirstName); 

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

+1

`us` означает небезопасные и` ss` означает `supersafe`? : D – LiraNuna 2009-11-24 00:47:47

12

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

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

2

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

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

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

1

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^