2017-04-17 30 views
6

Byłem na almaconnect.com, na stronie głównej znajduje się pole tekstowe, które automatycznie sugeruje niektóre wyniki uniwersytetów podczas pisania (ładowanie treści przez wywołanie ajax). Zrobiłem dokonać curl wniosek samego wywołania ajax, ale żądanie spowodowało w niektórych kodowanych linii na terminaluJak zabezpieczyć treść ajaxową

curl 'https://www.almaconnect.com/suggestions/portaled_institute?q=am' -H 'Host: www.almaconnect.com' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Accept-Language: en-US,en;q=0.5' -H 'Accept-Encoding: gzip, deflate, br' -H 'X-Requested-With: XMLHttpRequest' -H 'Referer: https://www.almaconnect.com/' -H 'Cookie: Almaconnect=; _ga=GA1.2.315358219.1489989532; __utma=117457241.315358219.1489989532.1490871434.1492414070.3; __utmz=117457241.1490871434.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); _gat=1; __utmb=117457241.1.10.1492414070; __utmc=117457241; __utmt=1' 

Chcę dokładnie taką samą funkcjonalność na mojej stronie internetowej tak, że jeśli każdy użytkownik spróbować sprowadzić moich danych witryn, nie chciał być w stanie.

Odpowiedz

9

Niezależnie od danych binarnych, które widzisz w terminalu podczas wywoływania zwijania, nie jest zaszyfrowana zawartość. To tylko skompresowana treść. Można go zweryfikować przez uruchomienie

curl $params > output 

można sprawdzić, czy plik spełnia wszelkie znane formaty plików uruchamiając

file output 

Zobaczysz, że wynik jako coś podobnego do

output: gzip compressed data, from Unix 

Uruchomienie gzip -d -c output spowoduje dekompresję i wydrukowanie treści w postaci zwykłego tekstu na ekranie terminala.

Powód

Powodem dlaczego tak się dzieje dlatego, wysyłać nagłówek accept-encoding z curl rozmowy. W przeciwieństwie do przeglądarki, curl nie rozpakowuje wyników automatycznie. To jest powód tego zamieszania.

-H 'Accept-Encoding: gzip, deflate, br' 

Usunięcie tego konkretnego nagłówka z wywołania curl spowoduje otrzymanie odpowiedzi bezpośrednio w formacie nieskompresowanego tekstu jawnego. Możesz wypróbować następujące polecenie dla tego.

curl 'https://www.almaconnect.com/suggestions/portaled_institute?q=am' -H 'Host: www.almaconnect.com' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0' -H 'Accept: application/json, text/javascript, */*; q=0.01' -H 'Accept-Language: en-US,en;q=0.5' -H 'X-Requested-With: XMLHttpRequest' -H 'Referer: https://www.almaconnect.com/' -H 'Cookie: Almaconnect=; _ga=GA1.2.315358219.1489989532; __utma=117457241.315358219.1489989532.1490871434.1492414070.3; __utmz=117457241.1490871434.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); _gat=1; __utmb=117457241.1.10.1492414070; __utmc=117457241; __utmt=1' 

Podsumowanie

almaconnect.com naprawdę nie podejmować żadnych dodatkowych kroków w celu ukrycie ich odpowiedzi AJAX. I generalnie jest to zły pomysł. Bez względu na to, jaką metodę zastosujesz do zaciemnienia swoich odpowiedzi (np. Za pomocą pola odsyłającego HTTP), ludzie zawsze mogą wymyślić środki zaradcze, aby je pokonać.

Po prostu nie warto poświęcać czasu i wysiłku, aby wymyślić mechanizm, który ostatecznie zostanie zerwany przez zdeterminowanego napastnika.

+0

Dziękuję @ gtux, "zaakceptuj kodowanie" myliło mnie tutaj, cudownie wyjaśnione. –

0

Serwer odsyła zaszyfrowaną odpowiedź, która po odbiorze jest odszyfrowywana po stronie klienta przy użyciu javascript. Możesz zrobić to samo, wysyłając odpowiedź serwera w pewnym szyfrowaniu, które będzie następnie odszyfrowane po stronie klienta. Przykładem może być crypto js. Spójrz na to: Encrypt with PHP, Decrypt with Javascript (cryptojs)

+0

ale robią coś inaczej powodować jeśli widzisz w odpowiedzi firebug nie są szyfrowane. –

0

Być może sprawdzają wartość HTTP_REFERER dla żądania ajax. Jeśli HTTP_REFERER nie jest stroną internetową, może zwrócić zaszyfrowaną odpowiedź.

Połączenia ajax można również zabezpieczyć za pomocą żetonów opartych na czasie. Na przykład, gdy żądana jest strona internetowa, losowy ciąg może być generowany na serwerze i przechowywany w bazie danych. Ten ciąg jest wysyłany do klienta, który używa go w żądaniu ajax. Serwer może następnie sprawdzić, czy token wygasł, czy nie. Ta metoda pozwala, aby wywołanie ajax było ważne przez określony czas.

+0

Ustawiam Referer w moim żądaniu curl, więc nie może to być przypadek. –

1

Nie jest to możliwe.

Dobrze wyjaśnia, dlaczego wyświetlane są znaki binarne skompresowanej treści, a nie treści zaszyfrowanych.

Zauważ, że to bardzo prosta wersja działa:

curl 'https://www.almaconnect.com/suggestions/portaled_institute?q=am' 

Odpowiedź from gaganshera może pokazać drogę do zaciemniać treści, ale to nie znaczy, aby rzeczywiście chronić zawartość, tak aby nieco trudniejsze dla ludzi aby to zobaczyć, ponieważ kod deszyfrujący znajduje się na stronach publicznych.

Twoja strona może być chroniona przez zabezpieczenia (zaloguj się + ustawić plik cookie) lub być publicznie dostępna. Jeśli jest zabezpieczony, kod zabezpieczający sprawdza nagłówek pliku cookie. Jeśli jest publiczny, istnieją tylko sposoby na zaciemnienie treści, a nie jej ochronę.

https://stackoverflow.com/a/14570971/1536382

https://www.quora.com/How-can-we-hide-JSON-data-from-tools-like-Chrome-development-tools-and-Firebug-etc-as-a-security-beyond-https