Я пытаюсь включить шифрование viewstate Всегда в качестве меры безопасности для моего веб-сайта ASP.NET 3.5, размещенного в IIS6. Мы отключили viewstate, но все еще видим некоторое "controlstate" в этой строке. В тестовой среде я могу просто установить следующее в web.config, и я больше не могу base64 расшифровывать viewstate до полу-открытого текста:
<pages enableViewState="false" enableViewStateMac="true" viewStateEncryptionMode="Always">
Я даже добавил следующее (genereated с помощью машинный генератор ключей) в machine.config и все еще шифрует тон viewstate на моем тестовом сервере:
<machineKey validationKey="002..." decryptionKey="D90E..." validation="SHA1" decryption="AES" />
Моя не-тестовая среда, похоже, не поднимает вышеуказанные изменения, так как я всегда могу base64 декодировать viewstate до обычного текста с указанными выше настройками. Я всегда делаю изменения после внесения каких-либо изменений.
Некоторая информация о моем не-тестовом веб-сервере:
- Web Farm/Load Balanced (но только один сервер для тестирования прямо сейчас)
- Состояние сеанса Sql (машинный ключ в machine.config был первоначально необходим, чтобы установить это)
- machine.config: развертывание retail = "true"
Может ли кто-нибудь предложить, где искать дополнительные параметры, которые могут мешать использованию шифрования в формате asp.net viewstate?
EDIT: теперь на моем тестовом сервере iis я не могу отменить параметр viewStateEncryptionMode, поскольку он шифрует представление, даже когда я установил его в "Никогда", и ни один из моих других веб-сайтов, похоже, не удержит эту настройку. Где я могу посмотреть, где это свойство переопределяется? Есть ли кеш, где этот параметр хранится, который нужно очистить, кроме того, что было бы сделано, когда я iresreset/stop www service/touch machine.config?
EDIT FINAL: после нескольких дней изучения файлов конфигурации я сдался и реализовал это с помощью кода. У меня уже был модуль безопасности, который привязывался к событиям страницы, поэтому в Page_Load я добавил: Page.RegisterRequiresViewStateEncryption();
Мне бы очень хотелось знать, что мешало этой настройке сразу же набирать IIS6. Когда я запускаю cassini локально, если я устанавливаю viewStateEncryptionMode на "Всегда" через страницы node, я сразу же увижу, что он закодирует viewstate и отобразит дополнительное скрытое поле с id = "__ VIEWSTATEENCRYPTED". Когда я установил его "Никогда", я сразу увижу, что шифрование отключено. Если я сделаю то же самое изменение на веб-сайте на моем веб-сайте, размещенном на IIS6, это не будет иметь немедленного эффекта, но если я позволю настройке оставаться там, он в конечном итоге укрепится. Я бы остановил/запустил www-сервис, reset iis, очистил временный кеш ASPNET, но я не знаю, что еще попробовать? Надеюсь, этот пост может ROT на некоторое время, и кто-то в будущем увидит то же поведение, которое я испытал, и мы можем еще больше понять это!