ViewStateUserKey + wspólny hosting + błąd sprawdzania poprawności ViewStateMac

Tak więc pytanie jest proste, mimo że zaczynam mieć wątpliwości, czy to się uda ...

Mam stronę internetową, na której chciałem zabezpieczyć moją stację roboczą zalecanym ViewStateUserKey ..

Na mojej stronie podstawowej (odziedziczonej po stronie oczywiście) mam ten kod:

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

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

Działa dobrze na localhost, jednak po przesłaniu go na hosting (udostępniony hosting dostarczany przez jednego z naszych lokalnych dostawców), po uwierzytelnieniu daje tradycyjny błąd „Sprawdzanie poprawności adresu MAC nie powiodło się”. Jeśli skomentuję ten kod, działa on doskonale, więc jestem pewien, że jest to przyczyna 1000%.

Jakie jest najlepsze podejście do wykonywania zabezpieczeń wyświetlania na udostępnionym serwerze? Ustawiłem już ViewStateMac = „Enabled”. Czy to wystarczy, czy jakie jest zalecane obejście?

questionAnswers(1)

QuestionSolution

od chwili, gdy gra się na lokalnym hoście, a nie na serwerze, wydaje mi się, że masz pewne problemy z sesją, a identyfikator sesji zmienia się / szybko wygasa na twoim serwerze, szybciej niż wygasa uwierzytelnienie.

Z tego powodu od momentu, gdy użytkownik zobaczy stronę, do postu, sesja wygasła lub zmieni się przed zmianą Uwierzytelniania, więc identyfikator sesji jest inny, więc pojawia się ten błąd.

Inni uważają, że możesz wyglądać tak, jakbyś ustawiłmachineKey na web.config.

Aktualizacja

Porównaj swój kod ze Scottem, który zmieniłeś. Scott używa nazwy użytkownika, która w ogóle się nie zmienia i używasz sessionid, który może się zmienić, jak mówię.

Dla mnie eter używa tego, co sugeruje Scott, nazwy użytkownika, eteru, innej wartości, która również się nie zmienia, jak na przykład plik cookie użytkownika, który nie jest tak prosty.

Więc od Scottahttp://www.hanselman.com/blog/ViewStateUserKeyMakesViewStateMoreTamperresistant.aspx

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

I to jest powód, dla którego scott sprawdza, czy użytkownik jest uwierzytelniony, ponieważ dostaje jego nazwisko. Jeśli korzystasz z sessionid lub cookie użytkownika, nie musisz sprawdzać, czy jest uwierzytelniony.

Teraz, jeśli użyjesz ciasteczka, aby ustawić je na viewstateuserkey, dla wszystkich użytkowników, to ten, który nie zezwala na pliki cookie, i spróbuj zrobić dowolny post, dostanie błąd. Więc pomyśl o takim rozwiązaniu, aby sobie z nimi poradzić

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

 Aristos02 cze 2012, 15:18
@walther Scott, użyj nazwy użytkownika! To się nie zmienia! wypróbuj kod Scotta taki, jaki jest.
 walther02 cze 2012, 15:16
Cóż, Scott Hanselman ma ten fragment kodu na swojej stronie internetowej, więc pomyślałem, że będzie dobrze. Pierwotnie miałem go bez sprawdzenia uwierzytelnionego użytkownika, ale też nie pomogłem.hanselman.com/blog/…
 walther02 cze 2012, 15:08
Właśnie tak myślałem, że mój identyfikator sesji się zmienił. Jednak po kilku badaniach (sprawdzonych w narzędziach sieciowych Chrome) wydaje się, że tak nie jest. Machinkey w moim web.config jest generowany przez tę stronęaspnetresources.com/tools/machineKey i sama (bez ViewStateUserKey) działa bez żadnych problemów.
 Aristos02 cze 2012, 15:11
@walther sessionid jest połączony z plikiem cookie użytkownika, ale jest zmieniany i wygasł. Dlaczego nie ustawiłeś bezpośredniego pliku cookie użytkownika? Po drugie, dlaczego sprawdzasz IsAuthenticated lub nie ... nie ma powodu, aby mieć bezpieczeństwo tylko dla użytkowników Authendicated. (przynajmniej w przypadku mojego kodu używam pliku cookie dla wszystkich użytkowników)
 walther02 cze 2012, 15:17
Podam dziennik sesji, spróbuj, zobaczymy .. Po kilku dalszych badaniach opublikuję.
 walther02 cze 2012, 15:45
Hmm, ok, masz rację, to działa. Jaki byłby najlepszy sposób na włączenie tego dla wszystkich użytkowników? Jaką wartość powinienem przypisać do ViewStateUserKey, aby był bezpieczny? Zaktualizuj swoją odpowiedź, a ja to zaakceptuję. Dzięki za pomoc.
 Aristos02 cze 2012, 15:53
@walther Mam aktualizację, jak zawsze sugeruję trzymać się tego, co robią scott, jest to proste i bezpieczne, aby uniknąć błędów.
 Aristos02 cze 2012, 15:12
@walther utwórz dziennik swojej sesji, aby sprawdzić, czy jest to zmiana.

yourAnswerToTheQuestion