2014-04-25 2 views
1

После многого чтения о EnableViewStateMac и возможности его удаления в будущих .NET Framework. Я все еще удивляюсь, почему это опция для установки на false.EnableViewStateMac = "false", почему это даже опция?

Я понимаю, что вы должны НИКОГДА установить его в false, но кто решил его создать вариант? И если кто-то действительно думал об этом, , почему бы ему установить значение false вообще?

Почему у вас есть опция для обеспечения безопасности?

+2

Это, вероятно, вопрос, в котором вам нужен кто-то в Microsoft. –

+0

Пока я согласен с @LasseV.Карлсен, что только ребята из Microsoft могут ответить на него правильно, я должен напомнить вам, что разработчики даже в Microsoft могут ошибаться. Я считаю, что оригинальные дизайнеры считали, что это значение «ложь» не имеет большого значения. Конечно, теперь мы знаем, что это большая проблема. –

ответ

1

Первоначально в течение времени asp страница HTML использовалась для публикации на страницах ASP, которые были совершенно разными. Этот подобный метод кодирования теперь называется перекрестным размещением. ViewState специфичен для страницы, поэтому, если вы попытаетесь опубликовать страницу asp.net на другой странице asp.net, то viewstate будет отличаться. Теперь в такой ситуации, если у вас есть EnableViewStateMac (что означает, что вы хотите проверить целостность состояния представлений), установка проверки завершится ошибкой и вызовет ошибку. Таким образом, люди будут отключать viewstatemac, чтобы они могли продолжать программировать старый способ, и Microsoft продолжала предоставлять эту функцию для поддержки устаревшего кода.

Но, как вы уже упоминали, это огромный риск для безопасности, открывающий ваше приложение для всех видов атак.

3

Этот переключатель был создан задолго до того, как я присоединился к команде ASP.NET, но мне это было любопытно, и я потратил некоторое время на проработку старой базы данных ошибок. Насколько я могу судить, есть две основные причины, по которым она была введена.

  1. Коммутатор был замечен как потенциально предлагающий преимущество в производительности. В раннем предварительном просмотре .NET Framework (1.0 alpha, действительно) вычисление MAC было действительно медленным. Это было исправлено до 1.0, достигнутого RTM, так что разница в производительности была незначительной. Тем не менее, ущерб был нанесен: семена были заложены в умах ранних разработчиков, что могут быть случаи, когда для эффективности MAC необходимо отключить. Это также привело к появлению нескольких статей MSDN, в которых говорилось о том, что отключение MAC повышает производительность, и я до сих пор (в 2014 году) обнаружение и удаление этих статей.

  2. В среде веб-фермы необходимо синхронизировать <machineKey>. К сожалению, мы не можем легко генерировать машинные ключи. Таким образом, в первые дни тестирования ASP.NET существовал коммутатор, позволяющий тестерам делать простую вещь для развертывания фермы, а не правильную для развертывания фермы. Сегодня мы все еще боремся: большинство разработчиков используют онлайн-генераторы ключей для ключей, которые небезопасны. Я работаю с командой Visual Studio, чтобы упростить создание и защиту машинных ключей.

В то время считалось, что наихудшая возможная вещь, которая может произойти, если MAC отключена, заключается в том, что вы могли бы XSS-сайт. Это оказалось неправильной оценкой.

И наконец, его удаление уже не просто возможно. Он уже удален в наших локальных исходных репозиториях. Следующее обновление .NET Framework, которое мы взорвали в мире , будет иметь, но у меня нет временных рамок того, когда это может быть. Мы просто сидим на триггере, ожидая доброго. :)

+0

Звучит интересно, приятно ответить Леви! – Rob

+0

У MS уже есть обновление, чтобы заставить его: http://support.microsoft.com/kb/2905247 –

+0

TIL, что .NET 1.0 дефолт EnableViewStateMac для False! –