asp.net проблема с шифрованием viewstate - PullRequest
19 голосов
/ 06 июля 2011

Я пытаюсь включить шифрование состояния сервера Всегда в качестве меры безопасности для моего веб-сайта ASP.NET 3.5, размещенного в IIS6.Мы отключили viewstate, но все еще видим некоторое «controlstate» в этой строке.В тестовой среде я могу просто установить следующее в web.config и больше не могу с помощью base64 декодировать viewstate в полу-открытый текст:

<pages enableViewState="false" enableViewStateMac="true" viewStateEncryptionMode="Always">

Я даже добавилследующий (генерируется генератором машинного ключа ) в machine.config и все еще шифрует штрафа состояния просмотра на моем тестовом сервере:

<machineKey validationKey="002..." decryptionKey="D90E..." validation="SHA1" decryption="AES" />

Моя не тестовая среда неКажется, я не могу подобрать вышеуказанные изменения, поскольку я всегда могу base64 декодировать состояние просмотра в обычный текст с указанными выше настройками.Я всегда делаю сброс после внесения каких-либо изменений.

Некоторая информация о моем не тестовом веб-сервере:

  • Web Farm / Load Balanced (но только один сервер готов для тестирования прямо сейчас)
  • Sql Session State (изначально для этого требовался machinekey в machine.config)
  • machine.config: развертывание retail = "true"

Может кто-нибудь предложитьгде искать дополнительные настройки, которые могут помешать шифрованию asp.net viewstate?

EDIT: теперь на моем тестовом сервере iis я не могу отменить настройку viewStateEncryptionMode, так как она шифрует viewstate, даже если я установил его на «Never»."и ни один из моих других сайтов, похоже, не воспользовался этим параметром.Где я могу посмотреть, где это свойство переопределяется?Есть ли кеш, где хранится этот параметр, который необходимо очистить, кроме того, что будет сделано, когда я буду iisreset / stop www service / touch machine.config?

РЕДАКТИРОВАТЬ ЗАКЛЮЧИТЕЛЬНО: После нескольких дней изучения файлов конфигурации я отказалсяи реализовал это с помощью кода.У меня уже был модуль безопасности, который прикреплялся к событиям страницы, поэтому в Page_Load я добавил: Page.RegisterRequiresViewStateEncryption ();

Мне бы очень хотелось узнать, что мешает этому параметру сразу же подхватиться на IIS6.Когда я запускаю cassini локально, если я устанавливаю viewStateEncryptionMode на «Always» через узел страниц, я сразу же вижу, как он кодирует состояние просмотра, и отображает дополнительное скрытое поле с id = "__ VIEWSTATEENCRYPTED".Когда я установлю его на «Никогда», я сразу же увижу, что шифрование отключено.Если я внесу точно такое же изменение в веб-сайт на своем веб-сайте IIS6, это не будет иметь немедленного эффекта, но если я позволю настройке остаться там, это в конечном итоге вступит в силу.Я бы остановил / запустил службу www, сбросил iis, очистил временный кеш ASPNET, но я не знаю, что еще попробовать?Надеюсь, что этот пост может ROT на какое-то время, и кто-то в будущем увидит то же поведение, которое я испытал, и мы сможем это выяснить!

Ответы [ 3 ]

2 голосов
/ 05 августа 2011

Я знаю, что прошло много времени с тех пор, как вы опубликовали это, но рассматривали ли вы вопрос о создании собственной реализации PageStatePersister?PageStatePersister - это компонент, отвечающий за форматирование данных ViewState и ControlState, встроенных в вашу страницу.Если безопасность является вашей главной задачей, вы можете использовать любые алгоритмы шифрования, которые вы хотите, чтобы ваши данные оставались конфиденциальными.В зависимости от вашей конфигурации это звучит так, как будто вы находитесь в довольно способной среде, поэтому сначала выполните нагрузочное тестирование.Стоит также упомянуть, что я не имею ни малейшего представления об опыте многоуровневого участия MVC в ViewState при его включении в «классический» сайт ASP.NET WebForms.

Удачи.

B

1 голос
/ 23 декабря 2012

Параметры страницы Web.config не применяются к предварительно скомпилированному приложению ASP.Net с отключенной возможностью обновления. Уже давно, но мой тестовый сервер, скорее всего, развернут с отключенной возможностью обновления ... извлеченный урок.

СМ. MSDN

Похоже Вопрос Я спросил, тот же вопрос.

0 голосов
/ 05 августа 2011

Я предполагаю, что веб-ферма с балансировкой нагрузки является источником путаницы. Вы заявили, что «только один сервер [сейчас] готов для тестирования», но все симптомы, которые вы испытываете, звучат точно так же, как если бы работали несколько серверов в веб-ферме, но вы сделали только файл web.config. и machine.config меняется на одном сервере. Когда вы заходите на веб-сайт с помощью браузера, иногда вы сталкиваетесь с одним сервером, который был настроен одним способом, иногда вы сталкиваетесь с другим сервером, который был настроен другим способом.

...