Suche nach als

Sicherheit:

Auf dieser Seite:

Durch Eingabe von Code in die Adresszeile oder in ein Formularfeld, welches zu einer Abfrage, einer Ausgabe im Browser oder einem Datenbankeintrag führt, oder durch einen Datei upload, lässt sich schädlicher Code einschmuggeln und ausführen. Folgende Sicherheitshinweise gilt es zu beachten.

Hacker

Es trifft immer die Unterentwickelten und Schwachen.

Es gibt Hacker, die üben sich an Banken und Regierungen. Hey, nichts gegen Robin Hood!
Und es gibt auch immer wieder einen, der löscht mit vorliebe den selbstgebastelten Blog und unbedeutende Wikis, ersetzt hier die index-Datei und präsentiert sich dann ganz stolz.

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

Benutzer-Eingaben Prüfen

Allgemeine Sicherheitsregeln:

Keine Benutzer-Dateien speichern

Durch Bild- oder Datei- Uploads können Scripts eingeschleust und zur Ausführung gebracht werden. Diese Scripts ermöglichen den Zugriff auf die Site. Ich rate dem Lehrling ab, jemandem die Möglichkeit zum Upload einer Datei anzubieten.

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 &auml;hhh und \"ich bin angef&uuml;hrt\"."
strip_tags:
Ich bin fett und ich hab 'n Apostrophe &auml;hhh und "ich bin angef&uuml;hrt".

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

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

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

addslashes:
<b>Ich bin fett</b> und ich hab \'n Apostrophe &auml;hhh und \"ich bin angef&uuml;hrt\".

preg_replace('/(<|>|&|'|")/','*',$myInput):
*b*Ich bin fett*/b* und ich hab *n Apostrophe *auml;hhh und *ich bin angef*uuml;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. Auch zur Übermittlung eines Wertes, der dann beim Einlesen durch Vergleich geprüft werden soll, leisten diese Funktionen ihren Dienst. Umkehrar ist dies jedoch nicht, denn es geht eher um hier eine Quersumme, denn um eine Verschlüsselung mit einem Schlüssel!

md5()

md5($myInput): 481af042c1e012b838ef9692b8c6e6c3

crc32()

crc32($myInput): 1173878966

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

mysql_real_escape_string

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

// 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

htmlentities()

PHP bietet auch Schutz vor Javascripts:

<?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.

Intro: >> <<
Ich bin hier: > PHP Lehrling >> Sicherheit:
 
HTML · CSS · JavaScript · PHP und MySQL · Andere
Letzter Update: 26.10.2016