Реклама:

ViewState[ "somedata" ] = someva'.ue:

При использовании стандартных настроек защита ViewState обеспечивается с помощью кода MAC (он управляется директивой страницы EnableViewStateMAC и никогда не должен отключаться), чтобы значения нельзя было изменять. Однако по умолчанию пересылка ViewState выполняется в открытом виде, а следовательно, может быть обнаружена. Предыдущая инструкция добавила некоторые данные в скрытое поле _V1E\VSTATE визуализированного вывода HTML.

/wEP DwU KMTUxMzcyM j Qy NwBWAh 4003J1ZG100.2 Fy ZE51PWJ1 eg KVmu 66ZGQx9Dl rt F) uDSRh2pYAingnXSwm8jg==

С помощью инструмента ViewState Decoder (http://www.pluralsight.com) вы можете декодировать значение поля (рис. 4-18).

Для защиты ViewState обычно используется алгоритм, указанный в атрибуте подтверждения элемента машинного ключа. По умолчанию же задается алгоритм SHA1 (только защита целостности). Смена алгоритма на 3DES или AES означает, что помимо установления защиты MAC все данные ViewState будут еще и зашифрованы. Это настройка типа «все или ничего», и ее не рекомендуется использовать, поскольку снижается скорость шифрования данных ViewState всех страниц.

Байер Доминик Microsoft ASP.NET. Обеспечение безопасности. Мастер-класс

Рис. 4-18. Окно ViewState Decoder

ВНИМАНИЕ! Следует знать, что по умолчанию браузер кэширует страницы локально. Если во ViewState вложены уязвимые данные (например, из текстового блока), они будут сохранены на жестком диске пользователя. Чтобы избежать этой проблемы, попробуйте отключить ViewState для выбранных полей. Вы также можете отключить кэширование полных страниц, используя директиву OutputCache. Для этого задайте атрибутам location и VaryByParam значение None. Даже защищенные страницы SSL кэшируются большинством браузеров (по умолчанию). Перейдя на вкладку Advanced Options IE, вы сможете управлять их поведением с помощью переключателя Do Not Save Encrypted Pages To Disk Всегда отключайте кэширование страниц с уязвимыми данными.

В ASP.NET 2.0 появилось повое, более гибкое свойство страницы ViewState-EncryptionMode. По умолчанию этому атрибуту присваивается значение Auto, и это означает, что данные ViewState открыты, но страница или отдельный элемент управления могут запросить при необходимости шифрование. Эту задачу можно выполнить путем вызова метода Page.RegisterRequiresViewStateEncryption, в результате чего все данные ViewState перед вложением в страницу будут зашифрованы. Кроме того, регистрируется новое скрытое поле с именем_VIEWSTATEENCRYPTED. Это поле маркера, который указывает ASP.NET, что содержимое скрытого поля ViewState следует расшифровать после получения данных из формы. С помощью следующего фрагмента кода данные добавляются в ноле ViewState вручную и запрашивается операция шифрования.

proiected voiO Page_Load(objcet sender. FventArgs e) !

Page.RegistetHeuui resViewStateEncryption( >; ViewState["some_sccn;t_data"] = "some secret data";

>

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

Обычно следует избегать вложения уязвимых данных в поле ViewState, однако если без этого не обойтись, присвойте свойству ViewStateEncryptionMode значение true.


⇐ Предыдущая страница| |Следующая страница ⇒