2011-07-27 11 views
8

Jestem zajęty systemem logowania do mojego projektu.Sprawdzanie, czy użytkownik zmienił wartość pliku cookie, ręcznie

Tylko dla dodatkowego zabezpieczenia. W jaki sposób mogę sprawdzić/wykryć, czy użytkownik ręcznie zmienił wartość pliku cookie?

Czy jest jakiś prosty sposób na zrobienie tego? Czy muszę ustawić dodatkową zmienną sesji i dopasować ją do tego? Czy jest to normalna sesja ASP.Net śledzona przez przeglądarkę? I widoczne dla użytkownika?

Dzięki.

Odpowiedz

9

Możesz dodać podpis cyfrowy do wartości cookie i sprawdzić podpis po przeczytaniu go. W ten sposób, jeśli wartość ciasteczka zostanie naruszona, będzie to bardzo widoczne.

private string sign(string hashStr, byte[] secret) 
{ 
    // Compute the signature hash 
    HMACSHA1 mac = new HMACSHA1(secret); 
    byte[] hashBytes = Encoding.UTF8.GetBytes(hashStr); 
    mac.TransformFinalBlock(hashBytes, 0, hashBytes.Length); 
    byte[] hashData = mac.Hash; 

    // Encode the hash in Base64. 
    string hashOut = Convert.ToBase64String(hashData); 

    return hashOut; 
} 

Edit: Poprawiono enkoder więc wyraźnie UTF-8.

Jak zwykle, należy również upewnić się, aby dodać trochę soli do łańcucha przed wywołaniem tego, patrz: Secure hash and salt for PHP passwords

+0

Mylić, co to jest 'headerencoder'? –

+0

Przepraszam, wytnij i wklej kod :) Będę edytować. –

+0

Dzięki Bill, zdecydowanie skorzystam z tego. –

2

Jeśli masz do czynienia z takimi wrażliwymi informacjami, proponuję, aby nie przechowywać ich w ciasteczkach użytkownika. Zamiast tego należy użyć wartości sessions, aby przechowywać takie wartości, ponieważ użytkownik nie będzie mógł manipulować takimi wartościami.

1

Dlaczego nie zaszyfrować wartości cookie. W ten sposób trudno jest mu właściwie go zmienić. Podobnie jak w poprzedniej odpowiedzi wspomniano, że jeśli jest naprawdę wrażliwy, cookie nie jest miejscem do przechowywania, ale szyfrowanie zapewnia nieco większą ochronę.

+0

Szyfrowanie to za mało - możesz zmienić wartości i nie zostanie to wykryte (chociaż odszyfrowywanie może się nie udać, a użytkownik oczywiście robi ślepe zmiany) - musisz również podpisać cookie, jak sugeruje Bill Brasky. – blowdart

+0

Naprawdę, bracie, nie sądzę, że ta odpowiedź zasługuje na pochwałę. sprawdź tę odpowiedź, jest to opcja. zależy to od twoich intencji. Być może szyfrowanie zadziała w tym celu. http://stackoverflow.com/questions/523629/tips-on-signed-cookies-instead-of-sessions –

0

Dodaj drugą zmienną do pliku cookie, który jest unikalny dla pierwszej wartości.

Na Page_Load porównaj dwie wartości z bazą danych.

Jeśli nie pasują do rekordu, usuń plik cookie.

Powiązane problemy