pozwól mi wyjaśnić szczegółowo

I 2 serwery hostowane i jeden z nich na koniec i inny jest dla front-end. Back-end Server: 127.0.0.1:8000 (tylko do wyjaśnienia) Serwer frontowy: 127.1.1.1:9000

Użytkownik żąda interfejsu użytkownika z serwera front-end, a jeśli chce utworzyć konto na mojej stronie, musi wysłać żądanie poczta do 127.0.0.1:8000/Create-account/, a to działa dobrze

Ale jeśli otworzę konsoli innych stron internetowych lub użyć listonosza, jestem w stanie osiągnąć te same wyniki. Chcę więc zapobiec tej rzeczy i tylko pozwolić każdemu, aby tylko utworzyć konto tylko z mojej strony internetowej.

metody, które próbowałem

  1. Użyłem Windows.Location () i wysłałem go na serwerze, a następnie sprawdź, czy nazwa domeny dopasowuje. Ale w tej metodzie każdy może po prostu przekazać je po prostu przez fetch ()
  2. Użyłem, aby umożliwił tylko adres IP, ale jeśli naciskam moją stronę w produkcji Inni użytkownicy otrzymują 403 błąd.

Rozwijam się w końcu z pomocą Django i Rustlang

-1
Abhay Singh 15 kwiecień 2021, 14:20

2 odpowiedzi

Najlepsza odpowiedź

To nie jest możliwe. Możesz utrudnić programiści na poziomie wejścia, aby odwrócić inżynierować rozwiązanie, ale nie ma sposobu, aby zapobiec dostępowi do interfejsu API, jeśli pozwolisz uzyskać dostęp do niektórych publicznych interfejsu użytkownika.

Ograniczenie oparte na adresach IP nie będzie działać tutaj, ponieważ Twoje zaplecze odbiera adres IP użytkownika. W takim przypadku zablokujesz dostęp do użytkowników, a nie do żadnego interfejsu użytkownika. Nawet weryfikacja nagłówka hosta nie działa tutaj, ponieważ każdy może korzystać z serwera proxy, tj. Nginx, aby zastąpić nagłówki i może udawać żądanie, aby rozpocząć się z zamierzonej strony internetowej.

Autoryzacja oparta na adresach IP może działać tylko wtedy, gdy połączenia API pochodzi z serwera, a serwer API odbiera ten sam adres IP dla każdego połączenia API. Ale dla twojego przypadku użycia nie ma zastosowania.

Starsze techniki, takie jak CSRF, są bezużyteczne, ponieważ każdy może łatwo odzyskać token i może go wysłać. Krótko mówiąc, jeśli zarobisz coś publicznego, może być zaprojektowany do tyłu. Jeśli zaakceptujesz rejestracje publiczne, nie powinno być martwić się o źródło rejestracji. Powinieneś pomyśleć o rozwiązaniach, takich jak weryfikacja e-mail itp., Aby zmniejszyć spam, jeśli to jest problem.

0
Dharman 15 kwiecień 2021, 11:36

Możesz mieć swój frontend rozwiązać reCAPTCHA i wysłać rozwiązanie do backend. Sprawdź rozwiązanie przed zaakceptowaniem żądania. Nadal jest możliwe omijanie, choć nieco trudniej.

0
chripede 15 kwiecień 2021, 11:42