Z tego co rozumiem, musisz zrobić trzy rzeczy: sprawić, aby wszystkie twoje zmiany danych były dostępne tylko z żądaniem POST, odrzucać żądania POST bez ważnego referrer (musi to być z tej samej domeny) i sprawdzać token uwierzytelnienia w każde żądanie POST (wartość tokenu POST musi być taka sama, jak token w pliku cookie).
Pierwsze dwa sprawiają, że naprawdę trudno jest wykonać dowolne szkodliwe żądanie CSRF, ponieważ zazwyczaj są to ukryte obrazy w wiadomościach e-mail, na innych stronach itp., A przesłanie żądania POST z ważnym odnośnikiem powinno być niemożliwe/trudne w nowoczesne przeglądarki. Liczba ta uniemożliwi wykonanie jakichkolwiek działań szkodliwych bez kradzieży plików cookie użytkownika/wykradzenia ruchu.
Teraz o pytania:
- To pytanie naprawdę mylą mnie: jeśli używasz uwierzytelniania żetony poprawnie wtedy atakujący musi znać tokenu użytkownika z pliku cookie, aby wysłać go wraz z wnioskiem, więc dlaczego począwszy ważny napastnik własnego sesja może wyrządzić jakąkolwiek krzywdę?
- Nonces sprawi, że wszystkie twoje linki będą brzydkie - nigdy nie widziałam, żeby ktokolwiek z nich korzystał. I myślę, że twoja strona może zostać wykorzystana, ponieważ musisz zapisywać/przeszukiwać wszystkie rzeczowniki w bazie danych - wiele żądań generowania rzeczowników może bardzo szybko zwiększyć rozmiar bazy danych (a wyszukiwanie ich będzie powolne).
- Jeśli zezwalasz na odrzucenie ataku Dos tylko jednemu noun na identyfikator użytkownika, to jeśli użytkownik otworzy stronę, otwiera kolejną stronę, a następnie przesyła pierwszą stronę - jego żądanie zostanie odrzucone, gdy wygenerowany zostanie nowy noun, a stary jeden jest już nieważny.
- Jak inaczej można zidentyfikować unikalnego użytkownika bez identyfikatora sesji, czy jest to plik cookie, GET lub POST?
UPD: jak nie mówimy abot CSRF więcej: można realizować wiele niejasnych obronne, które będą zapobiegać boty pająk z wysłaniem formularza:
- ukrytych pól formularzy, które nie powinny być wypełnione (boty zwykle wypełnij większość pól formularza, które widzą, które mają dobre nazwy, nawet jeśli są naprawdę ukryte dla użytkownika)
- Javascript trackers myszy (można analizować nagrane ruchy myszy w celu wykrycia botów)
- Analiza dzienników żądań plików (gdy Strona jest załadowana javascript/css/images powinno być loa w większości przypadków dedowane, ale niektórzy (naprawdę rzadcy) użytkownicy mają to wyłączone)
- Zmiany w formularzu JavaScript (gdy do formularza jest dodawane ukryte (lub nie) pole z javascript, które jest wymagane na serwerze: boty zwykle nie uruchamiaj javascript)
- Narzędzia do analizy ruchu, takie jak Snort, aby wykrywać wzorce botów (dziwne programy użytkownika, zbyt szybkie przesyłanie formularzy itp.).
i więcej, ale na koniec dnia, niektóre nowoczesne boty używać całkowitą emulację prawdziwego zachowania użytkownika (za pomocą połączenia prawdziwa przeglądarka API) - więc jeśli ktoś naprawdę chcą zaatakować swoją stronę, nie ma obrony takiego pomoże Ci. Nawet obecnie CAPTCHA nie jest bardzo wiarygodna - oprócz złożonych algorytmów rozpoznawania obrazów, możesz teraz kupić 1000 CAPTCHA rozwiązanych przez ludzi dla dowolnej witryny za jedyne 1 $ (możesz znaleźć takie usługi głównie w krajach rozwijających się). Tak naprawdę, nie ma 100% obrony przed botami - każdy przypadek jest inny: czasami będziesz musiał stworzyć kompleksowy system obronny sam, czasem wystarczy odrobina regulacji.
Czy możesz podać dokładny wzór ataku, który został wprowadzony w Twojej witrynie? Twoja najnowsza aktualizacja posta sprawia, że bardzo mało prawdopodobne jest, że miałeś prosty atak CSRF - zwykle wykorzystują luki w sesjach (są one nawet nazywane "sesjami sesyjnymi" na wiki). Wygląda na to, że problem z twoją formą można łatwo rozwiązać za pomocą captcha. – XzKto
To był automatyczny atak, w którym wysłano zdalne formularze. CAPTCHA mogła zapobiec takiemu atakowi. Jednak nadal jestem zainteresowany ochroną formy w bardziej solidny sposób. Idealnie nie * pogorszenie * UX z CAPTCHA. Stąd token sesji lub jednorazowy. –
Uh, to jest dokładnie to, co robią boty - automatycznie przesyłają formularze - to nie jest atak CSRF. Jeśli wymyślisz kilka botów ochronnych, które nie wymagają testu odwrotnego Turinga, możesz dokonać rewolucji w Internecie :) Powodzenia! – XzKto