Hauptmenü

Untermenü

PHP/MySQL - Praxistutorial 2 - Daten absichern Teil 2

1. Die Abschnitte

2. Selber escapen

Kommt jetzt bloß nicht auf die Idee und fangt an, das selber zu machen. Also im Stile von


$_POST['zulieferer'] = str_replace("'""\'"$_POST['zulieferer']);
$_POST['zulieferer'] = str_replace('"''\"'$_POST['zulieferer']);

Nein

Dafür gibt es eine wunderbare Funktion namens mysql_real_escape_string. Dazu müsst ihr in der data/hersteller.php nur den Query entsprechend anpassen.


$query 'UPDATE 
  hersteller 
SET
  zulieferer = \''.mysql_real_escape_string($_POST['zulieferer']).'\',
  telefon    = \''.mysql_real_escape_string($_POST['telefon']).'\',
  fax        = \''.mysql_real_escape_string($_POST['telefax']).'\',
  strasse    = \''.mysql_real_escape_string($_POST['strasse']).'\',
  plz        = \''.mysql_real_escape_string($_POST['plz']).'\',
  ort        = \''.mysql_real_escape_string($_POST['ort']).'\'
WHERE 
  id = '.$_POST['id'];

3. Wirkungsweise

Wenn ihr jetzt zum Beispiel den Namen eines Herstellers ändert (nehmt ruhig wieder unseren "arabischen" Namen), so seht ihr nach dem Abspeichern im Hauptmenü auf einmal ein fettes rotes Al Hr\'Abiri. Denn im Gegensatz zur Einstellung magic_quotes_gpc wird bei mysql_real_escape_string das Escape-Zeichen \ mit in die Tabelle geschrieben. Klickt mal im Hauptmenü spaßeshalber mehrmals auf unseren "Araber" und dann immer wieder auf "Eingeben". Nach dem dritten Mal steht dann da ein Al Hr\\\\\\\'Abiri. In dem Fall wird dann auch noch jedes Mal der Backslash \ escaped.

4. Gegenmaßnahme

Um das zu verhindern, muss man die vorbelegten value-Werte vorher umwandeln. Und das geschieht mit der Funktion stripslashes. Denn die entfernt das Escape-Zeichen \ aus einer Zeichenkette. Aus Anschauungsgründen nehmen wir die Änderung mal nur an zwei Stellen vor.

inc/functions.inc.php


$ausgabe .= stripslashes($list[$i]['list']);

data/hersteller.php


<input type="text" name="zulieferer" class="feld" 
  value="<?php echo stripslashes($hersteller[1]); ?>">

Wem es Spaß macht, der kann das natürlich überall einbauen.

5. mysql_escape_string

Auch diese Funktion gibt es und sie fast identisch mit mysql_real_escape_string. Es existieren nur zwei Unterschiede, die aber sehr wichtig sind.

Eigenschaft mysql_escape_string mysql_real_escape_string
Verwendeter Zeichensatz wird nicht berücksichtigt wird berücksichtigt
Verbindungs-Kennung wird nicht berücksichtigt wird berücksichtigt

Besonders wegen der Berücksichtigung des Zeichensatzes solltet ihr meiner Meinung nach immer mysql_real_escape_string benutzen. Zu dem Problem komme ich aber später in disem Tutorial.

6. Fazit

Das ist noch lange nicht alles, besonders wenn es um das Thema Sicherheit geht. Daher gibt es dazu das schon erwähnte Tutorial.

Aber!

Bisher haben wir immer nur mit einer Tabelle gearbeitet. Es gibt also keinen Bezug untereinander. Wie will man also ein Produkt einem Hersteller zuordnen. Oder wie man herausfindet, welcher Kunde was bestellt hat. Nun, dazu komme ich im nächsten Tutorial.

zurück zum vorherigen Abschnitt