2017-04-17 3 views
6

Ich war auf almaconnect.com, auf der Homepage gibt es eine Textbox, die einige Ergebnisse von Universitäten automatisch vorschlagen, wenn Sie tippen (Inhalt durch einen Ajax Anruf laden). Ich eine Locke Anfrage von gleichem Ajax Anruf tat aber Anfrage führte zu einigen verschlüsselten Linien auf TerminalSo sichern Sie Ajax Inhalt

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' 

ich genau für meine Website der gleiche Funktionalität will, so dass, wenn jeder Benutzer versuchen, meine Website-Daten zu holen, würde er nicht in der Lage sein.

Antwort

9

Egal, welche Binärdaten Sie im Terminal sehen, wenn Sie den Anruf tätigen, ist kein verschlüsselter Inhalt. Es ist nur komprimierter Inhalt. Sie können es überprüfen, indem

curl $params > output 

laufen Sie können überprüfen, ob die Datei alle bekannten Dateiformate passt durch

file output 

laufen Sie sehen, dass das Ergebnis so etwas ähnliches wie

output: gzip compressed data, from Unix 

Wenn Sie gzip -d -c output ausführen, wird der Inhalt des Klartexts dekomprimiert und auf den Terminalbildschirm gedruckt.

Grund

Der Grund, warum dies passiert ist, weil Sie die accept-encoding Header mit dem curl Aufruf senden. Im Gegensatz zum Browser dekomprimiert curl das Ergebnis nicht automatisch. Das ist der Grund für diese Verwirrung.

Wenn Sie diese bestimmte Kopfzeile vom curl-Aufruf entfernen, erhalten Sie direkt die Antwort in einem unkomprimierten Klartextformat. Sie können den folgenden Befehl dafür versuchen.

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' 

Zusammenfassung

almaconnect.com nimmt nicht wirklich keine zusätzlichen Schritte, um ihre AJAX Antworten zu verschleiern. Und es ist generell eine schlechte Idee, dies zu tun. Welche Methode Sie auch immer anwenden, um Ihre Antworten zu verschleiern (z. B. mit dem HTTP-Referrer-Feld), Menschen können immer Gegenmaßnahmen ergreifen, um sie zu besiegen.

Es ist einfach nicht die Zeit wert, sich Mühe und Zeit zu geben, um einen Mechanismus zu entwickeln, der von einem entschlossenen Angreifer gebrochen werden könnte.

+0

Danke @gtux, "accept encoding" verwirrte mich hier, wunderbar erklärt. –

0

Der Server gibt eine verschlüsselte Antwort zurück, die nach dem Empfang am Client mithilfe von JavaScript entschlüsselt wird. Sie können dasselbe tun, indem Sie Ihre Serverantwort in einer Verschlüsselung senden, die dann auf der Clientseite entschlüsselt wird. Ein Beispiel für das gleiche kann Crypto js sein. Werfen Sie einen Blick auf diese: Encrypt with PHP, Decrypt with Javascript (cryptojs)

+0

aber sie etwas bewirken zu tun anders, wenn Sie in Firebug Antwort sehen nicht verschlüsselt ist. –

0

Vielleicht überprüfen sie den HTTP_REFERER-Wert für die Ajax-Anfrage. Wenn der HTTP_REFERER nicht die Website ist, kann er eine verschlüsselte Antwort zurückgeben.

Die Ajax-Aufrufe können auch mit zeitbasierten Token gesichert werden. Wenn beispielsweise eine Webseite angefordert wird, kann eine zufällige Zeichenfolge auf dem Server erzeugt und in der Datenbank gespeichert werden. Diese Zeichenfolge wird an den Client gesendet, der sie in der Ajax-Anfrage verwendet. Der Server kann dann prüfen, ob das Token abgelaufen ist oder nicht. Diese Methode ermöglicht, dass der Ajax-Ruf für eine bestimmte Zeit gültig ist.

+0

Ich setze Referer in meine Curl-Anfrage, damit das kein Fall sein kann. –

1

Es ist nicht möglich.

Die answer from gtux erklärt gut die Gründe, warum Sie binäre Zeichen von komprimiertem Inhalt sehen, nicht von verschlüsseltem Inhalt.

Beachten Sie, dass diese sehr einfache Version funktioniert:

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

Die Antwort from gaganshera Sie einen Weg, um Inhalte zu verschleiern zeigen kann, aber das bedeutet nicht wirklich Inhalt zu schützen, um nur ein wenig schwieriger für Menschen um es zu sehen, da der Entschlüsselungscode in öffentlichen Seiten ist.

Ihre Website kann durch Sicherheit geschützt werden (Login + Cookie setzen) oder öffentlich sein. Wenn geschützt ist, überprüft der Sicherheitscode den Cookie-Header. Wenn es öffentlich ist, gibt es nur Möglichkeiten, Inhalte zu verschleiern, nicht um sie zu schützen.

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