Suche nach als

Sicherheit:

Auf dieser Seite:

Eingaben Prüfen

Durch Eingabe von Code in die Adresszeile (in den Querrystring) oder in ein Formularfeld, welches direkt zu einer Abfrage führt oder zu einer Ausgabe im Browser oder welches einem Datenbankeintrag / einer Datenbankabfrage dient, lässt sich böser Code einschmuggeln und ausführen. Es darf keiner übermittelten Variablen vertraut werden, auch nicht solchen aus 'hidden-fields'. Ich kann diese bösen Strings mit folgenden Mitteln entschärfen.

Wichtige Stichworte zum Thema Sicherheit sind: >> Cross-Side Scripting und >> SQL-Injection!

Allgemeine Sicherheitsregeln:

PHP Code

Umwandeln von Benutzereingaben

Auf diesen String angewendet erzeugen obige Funktionen folgenden Output:

$myInput="<b>Ich bin fett</b> und ich hab 'n Apostrophe ähhh und \"ich bin angeführt\"."
strip_tags:
Ich bin fett und ich hab 'n Apostrophe ähhh und "ich bin angeführt".

htmlspecialchars:
&lt;b&gt;Ich bin fett&lt;/b&gt; und ich hab 'n Apostrophe ähhh und &quot;ich bin angeführt&quot;.

htmlspecialchars mit ENT_QUOTES:
&lt;b&gt;Ich bin fett&lt;/b&gt; und ich hab &#039;n Apostrophe ähhh und &quot;ich bin angeführt&quot;.

htmlentities mit ENT_QUOTES:
&lt;b&gt;Ich bin fett&lt;/b&gt; und ich hab &#039;n Apostrophe &auml;hhh und &quot;ich bin angef&uuml;hrt&quot;.

addslashes:
<b>Ich bin fett</b> und ich hab \'n Apostrophe ähhh und \"ich bin angeführt\".

preg_replace('/(<|>|&|'|")/','*',$myInput):
*b*Ich bin fett*/b* und ich hab *n Apostrophe ähhh und *ich bin angeführt*.

Typen erkennen von Zahlen / umwandeln in Zahlen

Auf diese Strings angewendet erzeugen obige Funktionen folgenden Output:

007666
007is666
is_string:
1
1

is_numeric:
1


is_int:



ctype_digit:
1


intval:
7666
7

settype int:
1
1

Verschlüsselung

Die Umwandlungen durch folgende Funktionen können genutzt werden um eindeutige Sessions zu generieren.

md5()

md5($myInput): f206f194e4dc19cca1429f307d88abf1

crc32()

crc32($myInput): 780040031

Verstecken und Verbieten

.htaccess

Zugangsdaten (z.B. in .inc Dateien abgelegt), sollen nicht in ungeschützten Verzeichnissen liegen! Errät man die Namen, kann die Datei einfach im Browser aufgerufen werden. Durch .htaccess-Dateien in speziel benannten Ordnern, kann der Zugriff auf diese Dateien von Aussen her verboten werden, der Zugriff von innen her (für die Scripte) bleibt dabei erhalten.

<FilesMatch "\.inc$">
Deny from all
</FilesMatch>

Zugriff auf mehrere Datei-Typen verbieten:

<FilesMatch "\.(inc|dat)$">
Deny from all
</FilesMatch>

Verstecken oder Zugriffverweigerung wäre eigentlich unnötig, würden die Include-Dateien etwa so heissen: inc_wasichmach.php (statt Endung .inc), den PHP-Dateien werden geparst und somit leer dargestellt. Mehr zu .ht-Dateien (im Teil 'Andere' im Kapitel 'Apache Server'). Mehr zu Passwortschutz durch .htaccess (im Teil 'Andere' im Kapitel 'Apache Server').

Achtung, die Angabe der zu schützenden Dateien in der Datei robots.txt (bitte nicht indexieren) ist natürlich ein Humbug!
Siehe: Server

SQL Code

<?php

// Anstatt

$abfrage = "SELECT spalte1 FROM tabelle WHERE spalte2 = '".$_POST['spalte2Wert']."'";
  $query = mysql_query($abfrage) or die("Datenbankabfrage ist fehlgeschlagen!");

mysql_real_escape_string

// sollte Folgendes verwendet werden:

$abfrage = "SELECT spalte1 FROM tabelle WHERE 
  spalte2 = '".mysql_real_escape_string($_POST['spalte2Wert'])."'";
  $query = mysql_query($abfrage) or exit;

?>

HTML/JavaScript Code

<?php
  $boesercode = "<script>alert('XSS');</script>";
  echo "Sie haben ".htmlentities($boesercode,ENT_QUOTES)." eingegeben";
  
  //Ausgabe: Sie haben &lt;script&gt;alert(&#039;XSS&#039;);&lt;/script&gt; eingegeben
?>

 


Valid XHTML 1.0 Check den Code.

Filter >> << Logdatei
Ich bin hier: > PHP Lehrling >> Sicherheit:
 
HTML und XHTML | CSS | JavaScript und DHTML | PHP und MySQL | Andere Sprachen
Letzter Update: 19.05.2012