02 июн. 2012 г., 14:16 от walther

ViewStateUserKey + общий хостинг + ошибка проверки ViewStateMac

Таким образом, вопрос прост, хотя я начинаю сомневаться в том, что мне ответят ...

У меня есть веб-сайт, на котором я хотел защитить свое представление с помощью рекомендованного ViewStateUserKey.

На моей базовой странице (унаследованной от Page очевидно) у меня есть этот код:

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        if (User.Identity.IsAuthenticated)
            base.ViewStateUserKey = Session.SessionID;
    }

Хорошо работает на локальном хосте, однако, когда я загружаю его на хостинг (общий хостинг, предоставляемый одним из наших локальных провайдеров), он дает традиционную & quot; Валидацию MAC представления состояния не удалось & quot; ошибка после аутентификации Если я закомментирую этот код, он будет работать отлично, поэтому я уверен, что это причина на 1000%.

Каков наилучший подход для обеспечения безопасности viewstate на виртуальном хостинге? Я уже установил ViewStateMac = & quot; Включено & quot; также. Достаточно ли этого или каков рекомендуемый обходной путь?

Ответы на вопрос (0)

23 мая 2017 г., 14:28 от CommunityAristos

с момента воспроизведения на локальном хосте, а не на сервере, мне кажется, что у вас есть некоторые проблемы с сеансом, и sessionID быстро меняется / истекает на вашем сервере, быстрее, чем истекает аутентификация.

И по этой причине с момента, когда пользователь видит страницу, до публикации, сеанс истек или изменился до изменения Аутентификации, поэтому sessionID отличается, и вы получаете эту ошибку.

Другие думают, что вы можете посмотреть, что вы установилиmachineKey на web.config.

Update

Сравните ваш код со Скоттом, который вы сделали по-другому. Скотт использует имя пользователя, которое совсем не меняется, и вы используете sessionid, который может измениться, как я говорю.

Для меня эфир использует то, что предлагает Скотт, имя пользователя, эфир какое-то другое значение, которое также не изменяется, например, cookie пользователя, которое не так легко изменить.

Так от Скоттаhttp://www.hanselman.com/blog/ViewStateUserKeyMakesViewStateMoreTamperresistant.aspx

void Page_Init (Object sender, EventArgs e)
{ 
   if (User.Identity.IsAuthenticated)
      ViewStateUserKey = User.Identity.Name;
}

И это причина того, что Скотт проверяет, является ли пользователь Аутентифицированным, потому что получает его имя. Если вы используете с идентификатором сеанса или файлом cookie пользователя, вам не нужно проверять подлинность.

Теперь, если вы используете cookie, чтобы установить их для viewstateuserkey, для всех пользователей, то тот, который не разрешает cookie, и попытается сделать любое сообщение, получит ошибку. Так что думайте, что такое решение, чтобы справиться с ними

https://stackoverflow.com/a/2551810/159270

ВАШ ОТВЕТ НА ВОПРОС