do tej pory byłem “czytaczem”, ale pora coś napisać Mam napisaną aplikację w Rails i potrzebuję z zewnętrznego skryptu dodać dane. Nie chcę robić tego bezpośrednio do bazy, bo dane są obrabiane przez aplikację. W tym konkretnym przypadku potrzebuję dodać zamówienie (model Order), a więc zgodnie z REST wysyłam dane POSTem do www.mojaaplikacja.com/orders.
Oczywiście zapewne chodzi o zabezpieczenie w rodzaju Cross-Site. Zauważyłem, że Rails w swoich formularzach dodaje klucz authenticity_token typu hidden z hashem zabezpieczającym - skopiowałem ten hash do swojego wywołania POST, ale to nie pomaga. Gdzieś w sieci czytałem, że być może chodzi jeszcze o jakieś zabezpieczenie cookie, ale nic konkretniejszego nie było napisane.
Czy ktoś wie w jaki sposób przesłać te dane? Nie chciałbym też wyłączać tego zabezpieczenia, no chyba, że to będzie ostateczność.
Proponuje wyłączyć to zabezpieczenie natomiast razem z danymi przesyłaj jakiś unikalny token, który będziesz sprawdzał w kontrolerze. Jak token się zgadza znaczy, że żądanie przyszło z tej drugiej aplikacji.
Mi nie chodzi o zmienianie saltu, tylko żebyś zrobił osobny hash do komunikacji z tą drugą aplikacją.
W obu możesz trzymać jakiś klucz np. ‘moj-super-tajny-klucz’ :). Teraz przy wysyłaniu zapytania pobierasz aktualny np. aktualny czas, dodajesz go do tego klucza i to wszystko razem hashujesz jakąś funkcją i razem z danymi wysyłasz ten hash i czas. Teraz w Railsach w akcji, która obsługuje tą akcję odczytujesz czas, dodajesz do tego samego tajnego klucza, hashujesz znowu i sprawdzasz czy się zgadzają hashe. I wtedy dla tej wybranej akcji możesz wyłączyć to wbudowane railsowe zabezpieczenie, dla wszystkich innych ono będzie.
A jak chcesz zrobić po railsowemu, to ten token jest trzymany albo w sesji albo w cookies więc trzeba albo ustanawiać sesje, albo przesyłać ciasteczka, żeby działało. przynajmniej tak mi się wydaje.
A żeby wyłączyć to zabezpieczenie dla jednej akcji trzeba dodać coś takiego do kontrolera
Ronin wielkie dzięki za pomoc - póki co wyłączyłem na jednej akcji sprawdzanie railsowego tokenu i dodałem własny - tak jak proponowałeś. w przyszłości jak znajdę czas to może się pobawię rozgryzienie tego jak przechwycić ten railsowy token (prawdopodobnie cookie).
Doszedłem do ciekawej rzeczy - jeśli dane wyśle się np. XMLem, nie ma weryfikacji