Można bezpiecznie usunąć ostrzeżenia z następujących czynności:
skip_before_filter :verify_authenticity_token
ten powinien iść do każdego kontrolera Rails API, które masz, lub jeśli masz base_controller
dla wszystkich kontrolerów API następnie umieścić go tam.
Jeśli możesz również uzyskać dostęp do swojej aplikacji przez przeglądarkę internetową, nie umieszczaj tej linii w numerze application_controller
, ponieważ stwarzasz lukę w zabezpieczeniach.
Można bezpiecznie usunąć csrf
dla wywołań API, ponieważ konkretna luka może zostać wykonana tylko przez przeglądarkę internetową.
Aktualizacja 16 grudnia 2013
Widziałem kilka linków do tej odpowiedzi i innej zawartości, co sugeruje wyjaśnienie. Interfejs API może być podatny na działanie CSRF, jeśli do uwierzytelnienia interfejsu API używa się internetowych metod uwierzytelniania - np. sesje lub pliki cookie.
Istnieje kilka dobrych szczegółów w Is your Web API susceptible to a CSRF exploit?.
Moja rada jest nadal ważna dla użytkowników RestKit, ponieważ dane uwierzytelniające użytkownika raczej nie będą oparte na sesjach lub plikach cookie, ale raczej na nazwach użytkowników lub kluczach API.
Jeśli twój interfejs API może być uwierzytelniony za pomocą sesji lub plików cookie, powinieneś unikać przeskakiwania : verify_authenticity_token
i powinieneś pomyśleć o przejściu na uwierzytelnianie oparte na kluczach API.
Jeśli twój interfejs API może zostać uwierzytelniony przy użyciu nazwy użytkownika i hasła, które są również używane do uwierzytelniania w Internecie, wciąż istnieje potencjalny exploit, chociaż jest on mniej poważny, ponieważ wymagałoby wpisania nazwy użytkownika i hasła Twojej witryny w polu wyzwanie Auth protokołu HTTP podczas odwiedzania witryny z exploitem. Ponownie, dla najlepszego bezpieczeństwa powinieneś pomyśleć o przejściu do uwierzytelniania opartego na kluczach API.
Warto zauważyć, że nie zgadzam się, że trzeba dodać :only => [:your_method]
dla dodatkowej ochrony, pod warunkiem, że posiadasz izolowane kontrolery APi, Twój interfejs API nie jest zmieszany z Twoimi odpowiedziami internetowymi i nie używasz sesji ani ciasteczek. Jeśli są one na miejscu, możesz bezpiecznie dodać skip_before_filter
do base_controller
dla swojego interfejsu API.
Aby uniknąć otwierania dużej dziury, zalecam pominięcie weryfikacji tylko dla twojej metody. 'skip_before_filter: verify_authenticity_token: only => [: your_method]' –
dla tych, którzy wycięli i wkleili powyższy kod: 'skip_before_filter: verify_authenticity_token,: only => [: your_method]' Marc zapomniał przecinka. Nie widzę przycisku edycji. – pjammer
Dzięki za te informacje szczegółowe .. –