Pracowałem nad projektem e-commerce opartym na Symfony2 (dla zaplecza) i AngularJS dla frontendu. Obecnie część Symfony jest używana tylko jako API, który ma trzy różne poziomy użytkownika (gość, klient & admin). Różne działania, które można zrobić w systemie (jak dodawanie/usuwanie danych) są zabezpieczone przez:Symfony2 RESTful API + AngularJS
1) Symfony2 firewall z ról użytkownika/kontroli dostępu
2) JMS dodatkowych zabezpieczeń (wyrażenia @PreAuthorize)
Dla części, które są bezpieczne, wszystko działa zgodnie z przeznaczeniem i jestem bardzo zadowolony z tego, jak działa.
Problem:
Istnieją części API, które są publiczne (takie jak wyszukiwanie informacji o produktach, kategorie itd.) Pobieram takie dane w Angular z wywołaniami Ajax do mojego API, które zwraca dane w formacie JSON. Przykładem może być:?
/api/produkt/get-all/page = 1 & count = 10 & sortowania [id] = asc
Problemem jest to, że ktoś mógł spojrzeć na żąda w przeglądarce i kopiuje ścieżkę i ma dostęp do wszystkich danych (takich jak wszystkie produkty) i może po prostu pobrać JSON wszystkich informacji. Chociaż dane te są "publiczne", nie chcę udostępniać innym tak łatwo "kradzieży" moich danych.
Pomysły & możliwe rozwiązania:
1) Szukałem na JWT (Json Web Reklamowe) standardu spróbować zabezpieczyć połączenia komunikacyjne z moim API i wdrożyć go w taki sposób, aby wygenerować token dla "prawdziwych" użytkowników znajdujących się na stronie internetowej, a taki limit bezpośredni dostęp do publicznych łączy API.
Co myślisz? Czy byłoby to możliwe rozwiązanie?
2) Czytałem również w innym pytaniu dotyczącym StackOverflow, że mogę sprawdzić nagłówek HTTP_X_REQUESTED_WITH od żądania, ale wszyscy wiemy, że może to być łatwo sfałszowane przez atakującego.
3) Wreszcie, czytałem podobne podejście do "rozwiązania" 1) tutaj: http://engineering.talis.com/articles/elegant-api-auth-angular-js/, ale nie jestem do końca pewien, czy to pasuje do mojego celu.
Dodatkowe uwagi:
- Nie chcę, aby ten kuloodporne, ale również nie chce dać ludziom możliwość Click 2 przyciski i uzyskać wszystkie moje dane. Wiem, że ostatecznie wszystkie informacje mogą zostać "skradzione" (np. Za pomocą scrappera sieciowego), ale "zabezpieczenie" systemu w taki sposób, że ludzie będą musieli trochę wysiłku, jest tym, co mam na myśli.
- naprawdę nie mogę ponownie modelu mój API zbyt wiele na tym etapie, ale jakieś pomysły będą mile widziane
Dzięki za poświęcenie czasu, aby czytać moje pytanie i szukam jakiejkolwiek informacji zwrotnej do przodu.
cant naprawdę ochrony danych publicznych, ponieważ _want_ społeczeństwo, aby móc zobaczyć te dane . Możesz spróbować utrudnić uzyskanie wszystkich danych, ale to wszystko. Po prostu zaakceptuj, że dane publiczne są publiczne i zainwestuj swoją moc w lepsze, wydajne rzeczy. – smat88dd