2009-08-20 15 views
4

Ich habe einen JSON-Webdienst, den ich nur für bestimmte Websites bereitstellen möchte. Es ist ein Service, der über JavaScript mit JSONP aufgerufen wird. Wie würde ich verhindern, dass nicht autorisierte Websites darauf zugreifen (oder es im besten Fall schwieriger machen)? Die Anforderung eines Benutzers/Passworts funktioniert nicht, da dies in JavaScript deutlich sichtbar wäre.Schützen eines JSON-Webdienstes

Beispiel: Mein Web-Service auf domain.com bietet Wetterinformationen und ich möchte nur, dass website.com und webpage.com darauf zugreifen können. Da der Webservice jedoch über JavaScript aufgerufen wird, kann lazywebsite.com nur die Quelle der Website/Webseite anzeigen und ihren JavaScript-Code kopieren/einfügen.

Meine Gedanken so weit:

  • einen API-Schlüssel verwenden und die HTTP_REFERER von einzuloggen, wo der Dienst aus zugegriffen wird. Dies ist nicht ideal, da HTTP_REFERER unzuverlässig ist.
  • Lassen Sie website.com/webpage.com eine eindeutige Schlüssel-Server-Seite erstellen, die einen von mir bereitgestellten Algorithmus verwendet, speichert ihn in einer Sitzung und verwendet diesen als Schlüssel für den Zugriff auf den Web-Service. Auf diese Weise wird das Token nur für diesen bestimmten Besucher registriert und der JS kann nicht kopiert/eingefügt werden. Das Problem wird dann auf website.com/webpage.com verschoben, um die Seite zu schützen, die den eindeutigen Schlüssel generiert.

Gibt es bessere Lösungen?

Antwort

4

Es gibt keinen perfekten Weg.

Wenn Sie die Sicherheit ernst nehmen, besteht die Lösung darin, Ihren JSON-Dienst nicht auf der Welt zu veröffentlichen. Machen Sie es privat und fordern Sie website.com und webpage.com an, um eine private Back-End-Anfrage von ihren Servern an Sie für die Daten zu stellen. Dann können Sie alles authentifizieren, was Sie wollen und die Geheimnisse bleiben in ihrem Server-Code sicher. Grundsätzlich ist es eine Proxy-Lösung. (Ein netter Vorteil: Ihre JSON-Daten haben jetzt denselben Ursprung wie die Website, was bedeutet, dass Sie keine JSONP-Hacks machen müssen).

Wenn Sie die Sicherheit weniger ernst nehmen und es einfach nur schwer machen wollen, sind die einfachsten Dinge, die Sie bereits angelegt haben. Überprüfen Sie Referer. Dieser Header kann gefälscht werden, aber es ist ein Schmerz und hoffentlich werden die meisten Angreifer nicht daran denken, es zu versuchen. Außerdem benötigen Sie ein Passwort und/oder einen API-Schlüssel (sie sind äquivalent) und verschleiern es innerhalb des Javascript, um es schwieriger zu machen.

-2

Als ein Update für diese alte Frage, empfehle ich Ihnen, schauen Sie sich an, was die Facebook- und Twitter-Javascript-APIs für die Sicherheit tun.