asp.net проблема шифрования viewstate
Я пытаюсь включить шифрование viewstate Always в качестве меры безопасности для моего веб-сайта 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?
РЕДАКТИРОВАТЬ: Теперь на моем тестовом сервере iis я не могу отменить настройку viewStateEncryptionMode, поскольку она шифрует состояние просмотра, даже когда я установил для него значение "Никогда", и ни один из моих других веб-сайтов, похоже, не захватил эту настройку. Где я могу посмотреть, где это свойство переопределяется? Есть ли кеш, где хранится этот параметр, который необходимо очистить, кроме того, что будет сделано, когда я остановлюсь / остановлю www service/touch machine.config?
РЕДАКТИРОВАТЬ ФИНАЛ: После нескольких дней изучения конфигурационных файлов я сдался и реализовал это с помощью кода. У меня уже был модуль безопасности, который прикреплялся к событиям страницы, поэтому в Page_Load я добавил: Page.RegisterRequiresViewStateEncryption();
Мне бы очень хотелось узнать, что мешает установке этого параметра сразу же на IIS6. Когда я запускаю cassini локально, если я устанавливаю viewStateEncryptionMode на "Always" через узел страниц, я сразу же вижу, как он кодирует состояние просмотра, и отображает дополнительное скрытое поле с id="__VIEWSTATEENCRYPTED". Когда я тогда установлю его на "Никогда", я сразу же увижу, что шифрование отключено. Если я внесу точно такое же изменение в веб-сайт на своем веб-сайте IIS6, это не будет иметь немедленного эффекта, но если я позволю настройке остаться там, это в конечном итоге вступит в силу. Я бы остановил / запустил службу www, сбросил iis, очистил временный кеш ASPNET, но я не знаю, что еще попробовать? Надеюсь, что этот пост может ROT на какое-то время, и кто-то в будущем увидит то же поведение, которое я испытал, и мы можем это выяснить!
3 ответа
Параметры страницы Web.config не применяются к предварительно скомпилированному приложению ASP.Net с отключенной возможностью обновления. Прошло некоторое время, но мой тестовый сервер, который я, вероятно, развернул с отключенной возможностью обновления... урок усвоен.
СМ. MSDN
Аналогичный вопрос, который я задал, та же проблема.
Я знаю, что прошло уже много времени с тех пор, как вы опубликовали это, но рассматривали ли вы вопрос о создании собственной реализации PageStatePersister? PageStatePersister - это компонент, отвечающий за форматирование данных ViewState и ControlState, встроенных в вашу страницу. Если безопасность является вашей главной задачей, вы можете использовать любые алгоритмы шифрования, которые вы хотите, чтобы ваши данные оставались конфиденциальными. Исходя из вашей конфигурации, это звучит так, как будто вы находитесь в довольно способной среде, поэтому, очевидно, сначала загрузите тест. Стоит также упомянуть, что я не имею ни малейшего представления об опыте многоуровневого участия MVC в ViewState или его опыте, когда он включен в "классический" сайт ASP.NET WebForms.
Удачи.
В
Я предполагаю, что веб-ферма с балансировкой нагрузки является источником путаницы. Вы заявили, что "только один сервер [сейчас] готов для тестирования", но все симптомы, которые вы испытываете, звучат точно так же, как если бы было запущено несколько серверов в веб-ферме, но вы сделали только файл web.config. и machine.config меняется на одном сервере. Когда вы заходите на веб-сайт с помощью своего браузера, иногда вы сталкиваетесь с одним сервером, который был настроен одним способом, иногда вы сталкиваетесь с другим сервером, который был настроен другим способом.