2012-02-25 9 views
16

Znacznik przeciw fałszerstwu przyjmuje wartość soli. Czy istnieją jakieś obawy związane z bezpieczeństwem dotyczące wyboru soli, takiej jakJak wybrać wartość soli dla ValidateAntiForgeryToken

  • minimalne wymagania długość
  • kryptograficznie silny
  • mieszanka alfanumerycznych i innych znaków (jak w przypadku haseł)

także , czy wartość soli jest widoczna dla klienta? Patrząc na kod źródłowy, wydaje się, że dodaje on wartość salt do pliku cookie.

Odpowiedz

39

Token anty-XSRF zawiera już osadzone informacje, które mogą jednoznacznie zidentyfikować token do konkretnego użytkownika (użytkownika, aplikacji) para. Parametr "Sól" ma na celu odróżnienie akcji, dla której przeznaczony jest określony token anty-XSRF. To nie ma być tajne. Zapraszam do dzielenia się nim ze światem. Szkoda, że ​​nie wybraliśmy innej nazwy, ponieważ termin sól wprowadza w błąd. Pomyśl o tym bardziej jako danych uzupełniających. :)

Już używamy odpowiedniej soli kryptograficznej pod kołdrą. Aby uzyskać więcej informacji, zobacz moją odpowiedź na runtime loading of ValidateAntiForgeryToken Salt value.

tl; dr: Nie zawracaj sobie głowy własnością Salt. Rozważamy usunięcie go z przyszłej wersji.

0

Ogólne: Twoja sól powinna być bezpieczną losową, unikalną wartością większą niż 128 bitów (na przykład/dev/urandom). Powinno to być przechowywane w postaci zwykłego tekstu w osobnej tabeli, aby można było z niego korzystać podczas weryfikacji skrótu. Nie powinien być widoczny dla klienta.

Ogólna idea jest taka, że ​​ty hash hasła użytkowników i sól razem i przechowywać tę wartość .. Na przykład:

SHA512(password || salt) 

gdzie password to hasło użytkowników, salt jest generowany losowo i unikalna wartość || jest konkatenacją.

Następnie, gdy użytkownik zwraca, powtórz proces z podanym hasłem i porównaj to z przechowywanym hashem, aby zweryfikować tożsamość użytkownika. Jeśli wykonasz szybkie wyszukiwanie google, znajdziesz więcej informacji na temat soli i ich celu.

Edit: To jest błędne w odniesieniu do MVC przed fałszerstwem tokena (patrz odpowiedź Leviego) i mieć odczytu tego blog. Sól wstępna jest unikalną nazwą formularza lub identyfikatorem formularza (i że nie jest oznaczona ani nazwana solą na początek)

+0

Co chcę wiedzieć, czy wartość soli zostanie wysłana do klienta, gdy używam AntiForgeryToken. Chociaż kod źródłowy wydaje się być przygotowaniem do soli, moje ograniczone umiejętności hakerskie nie były w stanie go odzyskać. Byłoby dość zawstydzająco, gdyby udało się go odzyskać, a sól mówi coś głupiego. –

+0

Cóż, jeśli sól jest odzyskiwana, to pokonałaby ona cel samej siebie. Także, jeśli jesteś tym zainteresowany, nie wybieraj czegoś głupiego: P – Kurt

+1

@Prowla - Mówi o soli za token przeciwdziałający fałszowaniu MVC, nie sól do hasła. To nie jest coś, co wymaga ogromnego wyrafinowania. Wystarczająco, aby udaremnić prosty atak. Z tego powodu prawie każda sól będzie do zaakceptowania. Okno ataku jest bardzo małe z fałszywymi żądaniami ze względu na sposób ich wykorzystania. –

Powiązane problemy