Problem scenariusz:laravel 4: Zapobieganie wielokrotne zgłoszenia Form - CSRF Reklamowe
Tworzę blog z laravel 4. Formularz, który jest odpowiedzialny za tworzenie nowych blogach jest zabezpieczony kompilacji w CSRF ochrona (Laravel Docs: CSRF Protection).
Wszystko działa dobrze, ale wygląda na to, że laravel nie odświeża tokenu csrf na każde żądanie.
Wystąpił problem polegający na tym, że jeśli użytkownik kliknie przycisk Wstecz w przeglądarce, aby powrócić do przesłanego formularza, wprowadzone dane będą się powtarzać, a użytkownik będzie mógł ponownie przesłać formularz. Może to stworzyć otwarte drzwi dla spamerów.
Zwykle zapobiega temu token CSRF, ponieważ jest odświeżany przy każdym żądaniu, ale Laravel nie wydaje się tego robić w ten sposób.
Używam podejścia laravel "Kontroler zasobów" (Laravel Docs: Resource Controllers) do obsługi widoków formularza i widoków na blogu. Ponadto używam walidatora wejściowego Laravels przed zapisaniem przesłanych danych wejściowych w bazie danych (MySQL).
Więc następujące pomysły wymyślił:
jakoś zmusić laravel 4 do regeneracji CSRF automatycznie na każde żądanie
wygenerować inny żeton i włączenie go do postaci ręcznie
zapisać znacznik czasu podania formularza w sesji użytkownika (php lub bazie danych) i przepustnicy ne W wysłanych formularza na podstawie czasu
Osobiście preferuję pierwszy pomysł, ale niestety nie mogłem znaleźć sposób zmuszając laravel zachowywać się jak chcę go mieć, bez hacking „Illuminate” Sam (które chcę zachować "tak, jak jest", aby móc aktualizować laravel bez "kłopotów hoff" ^^).
Co byś polecił?
Jak sobie z tym problemem poradziłeś?
Właśnie sprawdziłem jak stackoverflow obsługuje formularz na „history.back()”: w sprawie ponownego przedstawienia z te same dane, mówi: "Pytanie o tym tytule już istnieje, prosimy o bardziej szczegółowe." i "Możesz publikować tylko raz na 20 minut.". Jest opcją, ale tak naprawdę nie jest tym, czego chcę ... –