/ / Jak uniemożliwić użytkownikom modyfikowanie wartości plików cookie - asp.net-mvc, bezpieczeństwo, uwierzytelnianie, pliki cookie, szyfrowanie

Jak uniemożliwić użytkownikom modyfikowanie wartości plików cookie - asp.net-mvc, bezpieczeństwo, uwierzytelnianie, pliki cookie, szyfrowanie

Przechowuję wartość ItemId w pliku cookie, aby zachowaćśledzenie aktualnie wybranych użytkowników. Ten ItemId nie jest danymi wrażliwymi, nie obchodzi mnie, czy użytkownicy widzą wartość. Ta wartość będzie musiała być dostępna na większości stron, dlatego podjęto decyzję o zachowaniu wartości w pliku cookie zamiast w bazie danych. było to w DB i nie miałbym tego problemu.

Problem polega na tym, że użytkownik może zmodyfikować ten plik cookieItemId do innego użytkownika ItemId, a następnie mogliby potencjalnie wykonywać akcje na cudzym produkcie. To znaczy, dopóki nie zweryfikuję wartości cookie w bazie danych, aby upewnić się, że jest ona ważna dla zalogowanego użytkownika. Oznacza to, że db pokonuje cel umieszczenia wartości w pliku cookie.

Zasadniczo moje pytanie brzmi: jak mogę zapobiecużytkownik zmodyfikował plik cookie lub przynajmniej wiedział, że został zmodyfikowany? Wiem, że plik cookie uwierzytelniania formularzy .NET przechowuje dane identyfikatora użytkownika i roli, więc mają oczywiście ten sam problem.

Moją pierwszą myślą było zaszyfrowanie wartości w pliku cookie. Rozumiem, że plik cookie mógł zostać przejęty, ale czy to przynajmniej uniemożliwiłoby manipulowanie jego wartościami?

Może powinienem był zamiast tego pojechać trasą db?

Dzięki.

Odpowiedzi:

2 dla odpowiedzi № 1

Standardowa odpowiedź brzmi "Brak danych z przeglądarki jest godna zaufania".

Żaden.

sprawdź wartość cookie w bazie danych, aby upewnić się, że jest ona ważna dla zalogowanego użytkownika.

Poprawny. To jest rozwiązanie.

Co oznacza trafienie do bazy danych, która pokonuje cel umieszczenia wartości w pliku cookie.

Prawda w przypadku trafienia bazy danych, ale nieistotna, ponieważ bazy danych mają pamięć podręczną.

Plik cookie ma jednak pewną wartość.

Co ty powinien należy jednak użyć ramy, która utrzymuje sesje i używa sesji do śledzenia tego. Nie ciasteczko, które wymyśliłeś.


1 dla odpowiedzi nr 2

Poniższe dwa cytaty z PO wzajemnie się przeczą:

Ten ItemId nie jest danymi wrażliwymi

I

Problem polega na tym, że użytkownik może zmodyfikować plik cookie ItemId do innego elementu ItemId użytkownika, a następnie mógłby potencjalnie wykonywać akcje na przedmiocie innej osoby.

Cała przesłanka twojego pytania jest słaba. Nie mogę ci powiedzieć, jak uniemożliwić użytkownikowi modyfikowanie wartości plików cookie, ponieważ nie powinieneś ufać niczemu wysłanemu przez klienta. Zawsze POTWIERDZAJ, ŻE KLIENT zmieni wartości plików cookie WSZYSTKIEGO CZASU. Wszystko inne to po prostu bardzo kiepski projekt.

Jedyne pliki cookie, których należy użyć, to:

  • Token użytkownika - losowy, wieloliterowy (powiedzmy 10-cyfrowy długi) łańcuch alfanumeryczny, który odnosi się do rzeczywistego identyfikatora użytkownika w bazie danych.

  • Token uwierzytelniania - losowy, wieloliterowy (powiedzmy 100-cyfrowy długi) łańcuch alfanumeryczny, który po haszowaniu musi być zgodny z wartością przechowywaną dla wspomnianego identyfikatora użytkownika w bazie danych.

  • Zobacz pliki cookie preferencji - Małe ciasteczka, które nie mają znaczenia, takie jakwybieranie motywu CSS, który ma być obsługiwany przez klienta, lub czy prezentowane dane mają być sortowane jako A-Z lub Z-A itd. Rzeczy, które nie mają znaczenia, jeśli zostały wyczyszczone i nie mają znaczącego wpływu na klienta lub innego użytkownika.

P.S. Nie martw się o "uderzenie" bazy danych przy każdym ładowaniu strony. Do tego są przeznaczone bazy danych. Nie mogę nawet myśleć o jednej nowoczesnej profesjonalnej stronie internetowej doesn "t zapytaj bazę danych dla każdego widoku strony.


0 dla odpowiedzi № 3

Jeśli kiedykolwiek martwisz się o manipulowanie wartościami plików cookie, to uważam, że jest wystarczająco czuły, aby minimum, bądź zaszyfrowany.

Zdobądź klucz, wektor inicjujący iszyfrowanie tego pliku cookie przed wysłaniem go do klienta. Twoją jedyną opcją jest baza danych, ale nadal będziesz potrzebować innej metody unikalnej identyfikacji użytkownika (czytaj: dostawca członkostwa)


-3 dla odpowiedzi № 4

Postanowiłem użyć skrótu MD5 do zweryfikowania, czy użytkownik nie manipulował wartościami plików cookie.