Подтвердить что ты не робот

Проблема с шифрованием состояния asp.net

Я пытаюсь включить шифрование 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 на некоторое время, и кто-то в будущем увидит то же поведение, которое я испытал, и мы можем еще больше понять это!

4b9b3361

Ответ 1

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

СМ. MSDN

Аналогично Question я Задана такая же проблема.

Ответ 2

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

Удачи.

В

Ответ 3

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