Was AJAX-Entwickler über Web Services wissen sollten
Kommentare

Mit Sicherheit
Obwohl bei AJAX-Anwendungen eine weitere Art der Kommunikation zwischen Client und Server dazukommt, ist das Sicherheitsmodell im Prinzip unverändert. So verwendet das XMLHttpRequest-Objekt

Mit Sicherheit

Obwohl bei AJAX-Anwendungen eine weitere Art der Kommunikation zwischen Client und Server dazukommt, ist das Sicherheitsmodell im Prinzip unverändert. So verwendet das XMLHttpRequest-Objekt offensichtlich denselben http-Protokoll-Stack, der auch beim Aufbau der Seite verwendet wird, und übermittelt z.B. automatisch Cookies und Referrer. Der Server kann so die Client-Session einer AJAX-Abfrage zuordnen. Die Sicherheit der Übertragung wird durch das https-Protokoll gewährleistet. Trotzdem gilt, dass generell bei Abfragen vom Server und beim Übermitteln von Daten an den Server nicht vertraut werden kann. Diese Annahme muss auch für alle Daten gelten, die über die AJAX-Kommunikation übermittelt werden. Die typischen Security-Themen, wie z.B. SQLInjection, JavaScriptInjection, Cross-Site Scripting und Buffer Overflows in den verwendeten Libraries, sind auch bei der AJAX-Kommunikation zu beachten. Was den IE 5.x bis 6.0 betrifft, wird leider das XMLHttpRequest-Objekt als ActiveX-Komponente aktiviert. Wer den Schalter für die Aktivierung von „sicheren“ ActiveX-Komponenten ausgestellt hat, kann somit AJAX-Anwendungen nicht verwenden. Mit dem IE 7.0 wird das XMLHttpRequest entsprechend dem Standard auch als direktes Objekt zur Verfügung stehen und kann unabhängig vom ActiveX-Mechanismus berechtigt werden (siehe auch hier und hier).

Das Protokoll der http-
-Elemente

Innerhalb der Nutzdaten des http-Protokolls gibt es seit Einführung des -Elements in HTML einige weitere Festlegungen, wie Daten der -Elemente einer Form zu übertragen sind. Eine wichtige Rolle spielt dabei das Protokoll mit dem Typ application/x-www-form-urlencoded. Listing 2 zeigt, dass innerhalb der Nutzdaten die Zeichen & und = als Trennzeichen von Namen-Werte-Paaren verwendet werden, so wie dies auch in URLs im Anschluss an ein Fragezeichen oft zu sehen ist. Die andere Protokollspezifikation mit dem Typ multipart/form-data wird ebenfalls von allen Browsern und Servern verstanden und ermöglicht ein Upload von umfangreichen Dateien an einen Server. Dieses Protokoll muss verwendet werden, wenn ein -Element verwendet wird. Für AJAX spielt dieses Protokoll eine große Rolle, denn einige Frameworks verwenden es, insbesondere application/x-www-form-urlencoded, um die reguläre Arbeitsweise eines -Elements zu simulieren. Die Daten werden auf dem Client mit der Hilfe von JavaScript-Funktionen zusammengesetzt und mit einem XMLHttpRequest-Objekt an den Server übertragen. Dieser reagiert so, als ob das Formular abgesendet wurde und übermittelt eine neue Seite an den Client. Der Client kann die relevanten Stellen aus dem zurückgegebenen HTML-Code ausschneiden und in die aktuelle Seite integrieren. Damit werden selektiv einige Teile der Seite aktualisiert. Diese Art der AJAX-Programmierung wird oft als „indirekte AJAX-Frameworks“ bezeichnet. Eine recht vollständige Liste und interessante Vergleiche von .NET-basierten AJAX-Frameworks, die dieses Verfahren nutzen, findet man hier. Der Vorteil dieses Protokolls liegt darin, dass die Web Server damit bereits umgehen und die Nutzdaten entsprechend aufbereiten können. Wichtig bei der Verwendung des XMLHttpRequest-Objekts ist, dass der HTTP-Header Content-Type korrekt gesetzt wird.

xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

Eine Beispiel-Anwendung finden Sie hier, JavaScript-Code für ASP.NET hier und die exakte Definition dieses Protokolls hier.

Das REST-Verfahren

Der Begriff REST wurde von Roy Thomas Fielding in seiner Dissertation geprägt und steht für REpresentational State Transfer. Eine feste Protokolldefinition gibt es nicht, stattdessen wird mit REST der Ablauf eines Server-Aufrufs bezeichnet. Tatsächlich ist das http-Protokoll an sich eine einfache Umsetzung dieses Prinzips. Es kann sinnvoll für Datenquellen verwendet werden, die sich nicht sehr häufig ändern, wie z. B. RSS Feeds. Hier wird die Information oft in eine statische Datei geschrieben, wenn ein neuer Artikel publiziert wird. Natürlich ist es heutzutage nicht nur möglich, auf statische Inhalte zuzugreifen, sondern die Ergebnisse können auch dynamisch errechnet werden. Einfache Web Services können einen URL mit Parametern verwenden und das Ergebnis unmittelbar in den Nutzdaten zurückgeben. Eine Zerlegung einer Zahl in Primfaktoren ist z.B. hier verfügbar. Um mit einem REST-Verfahren auch Änderungen an den Ressourcen auf dem Web zu ermöglichen, haben sich bei http einige weitere Methoden wie PUT und DELETE etabliert.

WebDAV

Eine Erweiterung des http-Protokolls unter der Verwendung von XML ist das Beispiel WebDAV. Mit diesem Protokoll können Dateien oder andere Ressourcen im Web verwaltet, geändert und geordnet werden. Es ist besonders erwähnenswert, da Outlook Web Access von Microsoft, eine der ersten AJAX-Anwendungen, die um das Jahr 2000 entstand, mit diesem Protokoll arbeitet und sicherlich dafür gesorgt hat, dass das XMLHTTP ActiveX Control brauchbar und robust implementiert wurde.

HTML

Bei Webanwendungen bietet es sich an, HTML-Fragmente der aktuell geladenen Seite, die sich durch eine AJAX-Aktivität verändern, in Form von HTML-Fragmenten zu übermitteln. Diese werden auf dem Client wieder in die aktuelle Seite eingebaut, ohne dass die Seite neu geladen werden muss. Die Übertragung spart in erheblichem Maße Bandbreite im Netzwerk. Auch das Nachladen von Bildern und verknüpften JavaScript- oder CSS-Dateien entfällt. Dies ist das gängige Verfahren von indirekten AJAX-Frameworks. Das ASP.NET Atlas Framework von Microsoft ermöglicht es, anhand eines serverseitigen -Elements die dynamischen Bereiche einer Seite und die Events beim Update zu beschreiben (Listing 4). Für diese Lösungsansätze benötigt der Programmierer wenig JavaScript-Kenntnisse.

Listing 4
------------------------------------------------------------------
„Text only“

Die Übermittlung der Daten eines Web Services in der Form ihrer textuellen Repräsentation ist sicher die einfachste und dazu sehr effiziente Art, wenn es um Zeichenketten oder auch einfache Zahlen geht. Allerdings stößt man schnell an die Grenzen der Komplexität bei komplexeren Datentypen. Es ist zu klären, wie z.B. ein Datum oder eine Liste übertragen wird. Das Beispiel der Primfaktoren macht dies bereits deutlich, denn Listen von Zahlen werden gerne auch mit Komma oder Semikolon getrennt. Einfache AJAX-Beispiele verwenden gerne diesen Ansatz. Man muss sich früh entscheiden, ob man selbst ein Datenformat mit allen Details spezifizieren will, oder ob es sinnvoller ist, auf ein standardisiertes und verbreitetes Format auszuweichen.

JSON

JSON steht für JavaScript Object Notation und ist ein Bestandteil der JavaScript-Spezifikation ECMA-262. Mithilfe dieser Syntax ist es möglich, eine statische Beschreibung von komplexen Objekten vorzunehmen. Diese Syntax kann im Browser effizient genutzt werden, da das im Browser vorhandene JavaScript einen String mit dieser Syntax durch einen einfachen Aufruf der eval-Funktion in ein JavaScript-Objekt umsetzen kann (Listing 5). Auf der Seite des Servers, der solche Objektbeschreibungen zusammensetzen muss, sind aufgrund der Verbreitung vermutlich bereits geeignete Klassen oder Bibliotheken vorhanden. Die Website gibt hierzu einen recht guten Überblick.

Listing 5
---------------------------------------------------------------------
{ links:
  ["http://ajaxaspects.blogspot.com/2006/07/ajax-konferenz.html",
   "http://ajaxaspects.blogspot.com/2006/07/ajax-book-now-available-as-pdf.html",
   "http://ajaxaspects.blogspot.com/2006/06/building-ajax-enabled-popup-control.html",
   "http://ajaxaspects.blogspot.com/2006/06/aspnet-popup-web-contol.html"],
  icon: "http://ajaxaspects.blogspot.com/favicon.ico",
  visited: true,
  rank: 3.8
}

Der Nachteil dieser Objektbeschreibung liegt darin, dass es keinen standardisierten Weg gibt, um JSON-Syntax aus JavaScript-Objekten zu erzeugen und um visualisierbare HTML-Objekte aus JavaScript-Objekten abzuleiten. Wichtig ist dabei auch die Argumentation „eval is evil“. In der Tat ist es ein ziemlich unsicherer Ansatz, JSON-Daten, die vom Web kommen, einfach über die Funktion eval() auszuführen. Das Ergebnis kann ein brauchbares Objekt sein. Es kann aber auch irgendein Code dadurch ausgeführt werden, der dann auf dem Client „bösartig“ um sich schlägt. Aus diesem Grund gibt es auch spezielle und „sicherere“ JSON-Interpreter für JavaScript. Ein wichtiger Grund für die Verwendung von JSON ist, dass es gegenüber XML Bandbreite spart (etwa 40 %) und bei einfachen Daten gewöhnlich im Client schneller ist, weil kein XML-Objekt erzeugt und geparst werden muss.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -