Sicherung von JSONP?

9

Ich habe ein Skript, das JSONP verwendet, um domainübergreifende Ajax-Aufrufe durchzuführen. Das funktioniert gut, aber meine Frage ist, gibt es eine Möglichkeit, zu verhindern, dass andere Websites auf diese URLs zugreifen und Daten von ihnen erhalten? Ich möchte im Grunde eine Liste der erlaubten Seiten machen und nur Daten zurückgeben, wenn sie in der Liste sind. Ich benutze PHP und stelle fest, dass ich vielleicht "HTTP_REFERER" verwenden kann, aber gelesen habe, dass einige Browser diese Info nicht senden werden .... ??? Irgendwelche Ideen?

Danke!

    
mike 06.10.2010, 14:56
quelle

5 Antworten

6

Es gibt wirklich keine effektive Lösung. Wenn Ihr JSON über den Browser zugänglich ist, ist es für andere Websites gleichermaßen zugänglich. Für den Webserver ist eine Anfrage, die von einem Browser oder einem anderen Server stammt, praktisch nicht unterscheidbar von den Überschriften. Wie ILMV kommentierte, können Referrer (und andere Header) gefälscht werden. Sie sind schließlich selbst gemeldet.

Sicherheit ist niemals perfekt. Eine ausreichend entschlossene Person kann alle Sicherheitsmaßnahmen überwinden, aber das Ziel der Sicherheit ist es, eine ausreichend hohe Abschreckung zu schaffen, dass Laien und die meisten Menschen davon abgehalten werden könnten, die Zeit und die Ressourcen zu investieren, um die Sicherheit zu gefährden.

Mit diesem Gedanken können Sie eine Einstiegshürde schaffen, die hoch genug ist, dass andere Seiten wahrscheinlich keine Anfragen mit den Eintrittsbarrieren machen würden. Sie können Single-Use-Token generieren, die zum Abrufen der JSON-Daten erforderlich sind. Sobald ein Token zum Abrufen der JSON-Daten verwendet wird, wird das Token anschließend ungültig gemacht. Um ein Token abzurufen, muss die Webseite mit einem Token angefragt werden, das in der Seite in Javascript eingebettet ist, das dann in den Ajax-Aufruf für die JSON-Daten eingefügt wird. Kombinieren Sie dies mit Zeit auslaufenden Token und ausreichender Verschleierung im JavaScript und Sie haben eine ausreichend hohe Barriere erstellt.

Denken Sie daran, dies ist nicht unmöglich zu umgehen. Eine andere Website könnte das Token aus dem Javascript extrahieren und / oder den Ajax-Aufruf abfangen und die Daten an mehreren Stellen entführen.

    
theAlexPoon 06.10.2010, 16:43
quelle
0

Haben Sie Zugriff auf die Server / Sites, denen Sie Zugriff auf JSONP gewähren möchten?

Was Sie tun könnten, obwohl nicht ideal ist, einen Datensatz zu einer db der IP beim Laden der Seite hinzuzufügen, der die JSONP anzeigen darf, dann prüfen Sie, ob dieser Datensatz auf der jsonp-Auslastung existiert. Vielleicht habe ich einen Verfallszeitpunkt auf der Akte.

z.B.

Ссылка - Der Benutzer lädt die Seite, fügt seine IP der Datenbank der erlaubten Benutzer hinzu

Ссылка - wie oben in der Datenbank hinzufügen

  • Laden Sie JSONP, überprüfen Sie, ob die IP in der Datenbank vorhanden ist.
  • Löschen Sie den Datensatz nach einer Stunde aus der db, so dass beispielsweise ein weiterer Seitenladevorgang erforderlich ist

Obwohl dies ganz einfach umgangen werden könnte, wenn der Scraper (oder andere Sites) herausfinden könnten, welche Methode Sie verwenden, um Benutzern das Anzeigen des JSONP zu ermöglichen, müssen sie nur zuerst auf die Seite klicken.

>     
easyjo 07.10.2010 12:25
quelle
0

Wie wäre es mit einem Cookie, der ein Token enthält, das bei jeder jsonp-Anfrage verwendet wird? Je nach Konfiguration können Sie auch eine Variable verwenden, wenn Sie keine Cookies verwenden möchten.

    
Xandl 17.07.2012 06:01
quelle
0

Beim Arbeiten mit dem ImportScript-Formular ist der Web Worker ziemlich identisch mit jsonp. Machen Sie einen Doppel-Check, wie der ALEXPON gesagt hat. Main-Skript für Web-Worker, Web-Worker zum Trennen und Zurück mit Sicherheitsabfrage. Wenn der Web-Mitarbeiter auf das Haupt-Skript antwortet, ohne gefragt zu werden, oder mit dem falschen Token, ist es besser, seine Website an das Nirvana weiterzuleiten. Wenn der Server mit dem falschen Token gefragt wird, antworten Sie nicht. Cookies werden nicht mit einer ImportScript-Anfrage gesendet, da das Dokument nicht auf Web-Worker-Ebene verfügbar ist. Senden Sie sicherheitsrelevante Cookies immer mit einer Postanforderung.

Aber es gibt immer noch eine Menge Risiken. Der Mann in der Mitte weiß wie.

    
B.F. 04.02.2014 16:37
quelle
-1

Ich bin sicher, dass Sie dies mit htaccess tun können -

Stellen Sie sicher, dass Ihre Header "HTTP_REFERER" senden - ich kenne keinen Browser, der es nicht sendet, wenn Sie es ihm mitteilen. (wenn Sie immer noch besorgt sind, fallen Sie zurück)

Verwenden Sie dann htaccess, um den Zugriff vom richtigen Referer zu erlauben / zu verweigern.

%Vor%     
rob_james 11.10.2010 23:33
quelle

Tags und Links