2015-07-21 21 views
6

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.

+0

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

Odpowiedz

2

Można ograniczyć nadużycia systemu w różny sposób, w tym:

  • ograniczyć całkowitą liczbę żądań API powróci przed wymagające CAPTCHA lub jakiś inny metoda weryfikacji. Może to być ograniczone przez adres IP, odcisk palca przeglądarki, token uwierzytelniający itp.

  • Utrudniać oprawcy odgadywanie identyfikatorów produktów, kategorii itp. Za pomocą identyfikatorów GUID lub innych losowo generowanych identyfikatorów.

  • proxy zarządzanie API, takie jak Azure API Zarządzającego ds więcej kierownictwa przedsiębiorstwo z API (http://justazure.com/azure-api-management-part-one-introduction/)

0

Można spróbować czegoś takiego:

  1. Aby uzyskać dostęp do witryny anonimowi użytkownicy muszą najpierw wypełnić captcha, aby uzyskać tymczasowy token.
  2. Dodaj kontrolę nadsyłającą.
  3. Limit ilości danych anonimowych użytkowników może wyświetlić. Na przykład pierwsze 50 produktów.

W ten sposób każdy, kto chce ukraść twoje dane, musi najpierw uzyskać anonimowy tymczasowy token, wypełniając captcha i zmieniając stronę odsyłającą.

Powiązane problemy