2017-01-19 27 views
9

Mam stronę rezerwacyjną, z której udostępniam użytkownikowi kilka wierszy kodu, do których dodaję klucz API w kodzie div wraz z kodem. Użytkownicy są zobowiązani do dodania tych kodów na swojej stronie internetowej. Następnie ładuję widok z mojej witryny na ich stronę przy użyciu wywołań ajaxowych. Moje obawy są następujące: Jak mogę zapewnić bezpieczeństwo tych połączeń przy użyciu publicznego i prywatnego klucza API z restrykcyjnymi usługami sieciowymi za pomocą codeIgniter?Zabezpieczanie wywołań API z poziomu domeny za pomocą usługi RESTful

Mój kod dostarczane użytkownikowi wygląda

<link rel="stylesheet" type="text/css" href="http://localhost/bookingpoints_com/apiTesting/styles/first.css" /> 
    <script src="http://localhost/bookingpoints_com/contents/scripts/jquery.js" ></script> 
    <script src="http://localhost/bookingpoints_com/contents/scripts/apiused.js" ></script> 
    <script src="http://localhost/bookingpoints_com/apiTesting/scripts/common.js" ></script>   
    <div id="api-data-reserve" name="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNXRlc3QgY29kZTE=" data="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNW1HVnZ3YVhMRVc=" sitekey="Njc4ZDI5ZDZiN2RlYzIxMzM1N2U3ZWRkOGEwYjhlNThhZmZiNDNjNQ=="></div> 

przez te linie kodu robię wywołanie ajax do mojej strony i renderować widok na stronie użytkownika. Jak mogę sprawić, aby działał on jak klient google i tajna struktura kluczy z uwierzytelnianiem za pomocą restrykcyjnych usług korzystających z czystej architektury API?

+0

http: // stackoverflow.com/questions/4850702/is-cors-a-secure-way-to-do-cross-domain-ajax-requests – channasmcs

+0

Jeśli chcesz używać Codeigniter i API-keys z zapytaniami ajax, rozważ użycie implementacji Rest API jak: https://github.com/chriskacerguis/codeigniter-restserver –

+0

@MicKri Przeszedłem przez to, ale zaintrygowałem się, jak użyć klucza API, który podałem w kluczu API API Rest i nie aktualizować go przy każdym zapytaniu. –

Odpowiedz

2

Facebook, Google i inne duże firmy używają iframe dla tego rodzaju usług.
Weź przykład z Facebooka, który daje ci skrypt do wstawienia kodu, który po uruchomieniu stworzy element iframe dla określonego widoku.

Nie można również wykonywać międzywydziałowych wywołań ajaxowych. Tylko element iframe, który jest ładowany z Twojej witryny, może bezpiecznie załadować stronę.

Teraz za pomocą kluczy można zawsze podać klucz publiczny w skrypcie. Iframe href wskaże Ci stronę internetową pod numerem $_SERVER['http_referer'], gdzie możesz upewnić się, że klucz APi jest autoryzowany. Nie używaj klucza prywatnego, chyba że nie zamierzasz publikować żadnych prywatnych poufnych danych.

2

Żądania Ajax można emulować, tworząc odpowiednie nagłówki . Jeśli chcesz mieć podstawową kontrolę, aby sprawdzić, czy wniosek to żądanie Ajax można użyć:

if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { //Request identified as ajax request }, jednak nigdy nie należy opierać swoje bezpieczeństwo tego czeku. Zlikwiduje bezpośredni dostęp do strony, jeśli tego potrzebujesz.

Ale to nie wystarczy, trzeba zabezpieczyć połączenie Ajax za pomocą skryptów po stronie serwera (np. PHP). Na przykład, jeśli twoja AJAX przekazuje klucz do pliku PHP, napisz kod w pliku PHP, aby upewnić się, że jest to właściwy klucz.

2

Napisałem artykuł na temat zabezpieczania interfejsów REST API, w szczególności tych używanych przez przeglądarkę. Polecam spojrzeć na to, że dostawca uwierzytelniania ma również sporo zasobów, nie mam powiązań innych niż te używane wcześniej i podoba mi się ich produkt.

Wiele interfejsów API jest zabezpieczonych za pomocą JWT, które są miłe, ponieważ umożliwiają uwierzytelnianie wywołania API bez scentralizowanych serwerów uwierzytelniania. Opierają się na publicznych/prywatnych algorytmach kryptograficznych, w których dwa klucze są matematycznie powiązane. Klucze są generowane w zaufanym środowisku, takim jak serwer, ale każdy może zweryfikować, czy pochodzą od tego, kogo mówią. Można zaprojektować inne schematy tokenów uwierzytelniania.

W zależności od potrzeb, klucze będą dostępne dla dowolnego klienta, dzięki czemu można zaprojektować określony model uprawnień, aby upewnić się, że klucz ma prawa najmniejszych uprawnień (tj. Nie powinien mieć uprawnień administratora itp.)

Powiązane problemy