2016-09-19 51 views
5

Może to przesadzam.Zabezpieczanie interfejsu API przed wywołaniem poza przeglądarką

Mam trochę prostej gry javascript działającej w przeglądarce (zagadki itp.), A kiedy użytkownik wygrywa, punkty są wysyłane do backendu laravel w zależności od tego, jak szybko to zrobią.

Gdy użytkownik się loguje, tworzona jest typowa sesja, a gdy punkty są wysyłane za pomocą żądania POST, tak samo jest z csrf i JWT.

Czy jest możliwe, aby użytkownik otworzył chrome dev console i uzyskał URL, a następnie skopiował crsf, cookie lub JWT i wysłał punkty do backendu bez faktycznego grania w grę?

Apis wywoływany poza przeglądarką nie respektuje zasad Access Control-Allow-Origin.

Czy ktoś może wyjaśnić, co powstrzymuje użytkowników przed zrobieniem tego lub jak zapobiec temu działaniu i upewnić się, że użytkownicy rzeczywiście grają w grę, aby zdobywać punkty?

+0

Może, możesz sprawdzić, czy nagłówek User-Agent jest ustawiony jako dodatek. Ale to również można dodać bez potrzeby przeglądarki internetowej. – Bora

Odpowiedz

2

Jednym ze sposobów może być układanie gry krokami. Oznacza to, że należy używać wielu elementów <form>.

Strona początkowa zawiera dokładnie jeden element <form> z dokładnie jedną częścią gry.

Tylko przy przesłaniu tego formularza serwer wysyła następny element <form> do .

Każdy element <form> posiadający element <input type="submit"> z unikalnym identyfikatorem; na przykład znacznik czasu ustawiony na atrybucie name i wygenerowany na serwerze; która wygasa w jak największym czasie niezbędnym do ukończenia <form> na tym etapie w trakcie gry.

Jeśli użytkownik złoży <form> bez unikalnym identyfikatorem lub etap <form> zostanie złożone poza zasięgiem maksymalny czas potrzebny do ukończenia <form> co stanowi krok w tym procesie, użytkownik zostanie zdyskwalifikowany z „wygranej” obecna gra lub gra gra w przyszłości przez określony czas.

+0

Interesujące, ale czy nie będzie to nadal łatwe do manipulowania dla kogoś z odrobiną doświadczenia w programowaniu? – Orane

+0

@Orane W jaki sposób podejmiemy manipulację? – guest271314

+0

@Orane _ "ale czy nadal nie będzie to łatwe do manipulowania dla kogoś z odrobiną doświadczenia w programowaniu?" _ Jak po stronie serwera można mieć pewność, że cokolwiek klient robi w przeglądarce lub przesyła na serwer? Być może warto rozważyć postawienie nagrody za pytanie; zebranie szeregu możliwych interpretacji i podejść do potencjalnych problemów opisanych w pytaniu? – guest271314