JSONP

JSONP (JSON mit Padding) auch JSON-P ist eine JavaScript-Technik für den Datenzugriff bei dem JSON-Daten über ein <script>-Element eingebunden und inklu…

JSONP
Logo

JSONP (JSON mit Padding) auch JSON-P ist eine JavaScript-Technik für den Datenzugriff bei dem JSON-Daten über ein <script>-Element eingebunden und inklusive eines Funktionsaufrufs ausgegeben wird. Dies ermöglicht die Übertragung von über Domaingrenzen, ist jedoch mit Sicherheitsrisiken behaftet.

JSONP wurde 2005 von Bob Ippolito vorgestellt[1] und wird jetzt von vielen Web-2.0-Anwendungen wie Dojo Toolkit, jQuery,[2] Google Web Toolkit Applications[3] und Web Services unterstützt. Für dieses Protokoll wurden Erweiterungen vorgeschlagen, die zusätzliche Eingabeparameter ermöglichen, wie z. B. JSONPP.[4]

Funktionsweise

Üblicherweise erfolgen Ajax-Datenabfragen an Server über das XMLHttpRequest-Objekt eines Webbrowsers. Aufgrund der Same-Origin-Policy funktioniert das nicht, wenn die in einem Webbrowser angezeigte Webseite über dieses Objekt auf einen Server zuzugreifen versucht, der in einer anderen Domain als die angezeigte Webseite liegt. Das Problem kann durch JSONP umgangen werden. Im src-Attribut eines <script>-Elements ist es möglich, beliebige URLs anzugeben. Für dieses Attribut greift die Same-Origin-Policy nicht. Es ist also möglich, eine URL in einer anderen Domain anzugeben, die beispielsweise JSON-Daten zurückgibt. Dieses Script hätte aber keinen Effekt.

Um die JSON-Daten auf dem Client verarbeiten zu können, verpackt der Server diese als Parameter in eine JavaScript-Funktion, die im Webbrowser bereits definiert ist. Der Name dieser Funktion wird dem Server üblicherweise im Query-String der URL mitgeteilt, wobei das genaue Format oder der Name des Parameters nicht genormt ist.

Beispiel

Im HTML-Code einer Webseite werden die JSONP-Daten wie folgt eingebunden:

<script type="text/javascript"
        src="https://example.com/getjson?jsonp=exampleCallback">
</script>

Der Server erzeugt daraufhin einen JavaScript-Codeschnipsel, in dem die eigentlichen Daten an die genannte Funktion übergeben werden:

exampleCallback( {"name":"Jane Doe", "value":4711} );

Der Browser führt diesen Funktionsaufruf daraufhin aus, als ob er direkt in der HTML-Seite niedergeschrieben worden wäre, und kann so die JSON-Daten aus dem Aufruf verarbeiten.

Üblicherweise ist für jeden JSONP-Aufruf ein eigenes <script>-Element erforderlich.

Sicherheitsrisiken

<script>-Elemente ermöglichen es einem Server, beliebige Inhalte (nicht nur JSON-Objekte) an den Webbrowser zu übermitteln. Dies kann dazu führen, dass ein bösartiger Web-Service über die zurückgesendeten Daten private Informationen im Webbrowser ausspäht oder in seinem Sinne verändert (Cross-Site-Scripting).

Da das <script>-Element die Same-Origin-Policy nicht beachtet, kann eine bösartige Webseite JSONP-Daten anfordern und auswerten, die nicht für sie bestimmt sind (Cross-Site-Request-Forgery).[5] Das Problem tritt dann auf, wenn sensible Daten vor Dritten geschützt werden sollen.

Alternative

Mit Cross-Origin Resource Sharing (CORS) existiert ein vergleichbares Verfahren, das den Zugriff über Domaingrenzen hinweg ermöglicht, ohne jedoch der abgefragten Ressource die Möglichkeit einzuräumen, beliebigen JavaScript-Code auszuführen. Beide Verfahren erfordern die Unterstützung durch die entsprechende Ressource, wobei CORS einfacher zu implementieren ist. Gleichzeitig erlaubt CORS eine einfache Einschränkung seitens der Ressource, von welchen Datenquellen (englisch „origins“, das sind URLs, Domänen o. ä.) sie genutzt werden kann.

CORS ist gegenüber JSONP meist zu bevorzugen, da CORS insgesamt einfacher und sicherer ist.

  • jsonp.eu – Erklärungen und Programmierbeispiele zu JSON with Padding (JSONP)

Einzelnachweise

  1. Remote JSON – JSONP. In: Bob.pythonmac.org. 5. Dezember 2005, abgerufen am 23. Januar 2011 (englisch, from __future__ import *).
  2. jQuery API. In: api.jquery.com. Abgerufen am 23. Januar 2011 (englisch).
  3. GWT Tutorial: How to Read Web Services Client-Side with JSONP. In: Google Web Toolkit Applications. 6. Februar 2008, archiviert vom Original (nicht mehr online verfügbar) am 13. Februar 2008; abgerufen am 23. Januar 2011 (englisch).
  4. Jonas Almeida: JSON, JSONP, JSONPP? S3DB, 11. Juni 2008, archiviert vom Original am 24. Mai 2010; abgerufen am 23. Januar 2011 (englisch).
  5. Jeremiah Grossman: Advanced Web Attack Techniques using GMail. In: blog.jeremiahgrossman.com. 27. Januar 2006, abgerufen am 23. Januar 2011 (englisch).

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.