Register Globals
Diese PHP Funktion bewirkt, dass man per GET auf alle Variablen im Skript zugreifen kann.
Dadurch kann ein potenzieller Angreifer sämtliche Variablen manipulieren und so den
Ablauf des Skripts verändern.
Es bestehen zwei Möglichkeiten diese Funktion zu deaktivieren:
Per .htaccess
php_flag register_globals 0
Per php.ini
register_globals = Off
Magic Quotes
Die Magic Quotes Funktion bewirkt, dass in Zeichenketten einige Zeichen automatisch escapet werden.
Dies kann zu verschiedensten Problemen führen. Beispielsweise wenn man ein String manuell mit addslashes() escapet, dieser aber
bereits durch die Magic Quotes Funktion bearbeitet wurde, werden die Zeichen doppelt escapet.
Um die Funktion zu deaktivieren genügt folgendes:
Per .htaccess
php_flag magic_quotes_gpc 0
php_flag magic_quotes_runtime 0
Per php.ini
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
Fehlermeldungen abschalten
Bei der Entwicklung ist die Ausgabe von Fehlermeldungen seitens PHP sehr hilfreich.
Ist die Web-Applikation allerdings für jeden zugänglich, ist es ratsam die Ausgabe von Fehlermeldungen zu unterbinden. Dies hat den Vorteil, dass ein Angreifer so keine informationen über die Ordnerstruktur, verwendete Variablen oder eventuelle Sicherheitslücken bekommt.
Um die Ausgabe der Fehlermeldungen zu deaktivieren ist muss in jeder PHP-Datei folgendes an erster Stelle stehen:
<?php
error_reporting(0);
?>
Eingaben validieren
Um Fehler im Ablauf der Anwendung zu vermeiden sollte man sämtliche Benutzereingaben validieren.
Gibt der Nutzer beispielsweise anstatt eines Datums irgendwelche HTML-Tags ein, kann es eine Gefahr sein mit diesen Weiterzuarbeiten oder sie in einer Datenbank abzulegen.
Man sollte deshalb die Eingaben mit Regulären Ausdrücken überprüfen:
<?php
if (!preg_match( "/^[0-9]{1,2}$/", $_POST['month']))
{
// error
}
if (!preg_match( "/^[0-9]{1,2}$/", $_POST['day']))
{
// error
}
if (!preg_match( "/^[0-9]{4}$/", $_POST['year']))
{
// error
}
?>
Cross Site Scripting (XSS)
Bei Eingaben von Nutzern muss darauf geachtet werden, dass HTML-Tags wie beispielsweise <script></script> verboten werden. Am besten man escapet diese. Wenn man die Benutzung von HTML-Tags gänzlich verbieten möchte, empfiehlt sich der Einsatz eines BBCode Parsers. Dieser ersetzt beispielsweise
[b]text[/b]
durch
<b>text</b>
und filtert andere Zeichen automatisch.
Implementieren lässt sich ein BBCode Parser über Reguläre Ausdrücke. Es empfiehlt sich aber eine bereits vorhandene Implementierung zu nutzen:
HTML BBCodeParser
quickerUBB
SQL Injection verhindern
Dieses Problem führ ebenfalls auf nicht escapete Zeichenketten zurück. Bestimmte Zeichen könnten, sofern sie nicht vorher escapt wurden, als Steuerzeichen für SQL Befehle dienen.
PHP bietet hierzu spezielle Funktionen an, um Werte, die in die Datenbank eingetragen werden, zu escapen.
Bei MySQL nutzt man am besten folgende Funktion:
<?php
$email = mysql_real_escape_string($_POST['email']);
?>
Alternativ greift beim Benutzen von MySQLi natürlich
<?php
$email = mysqli_real_escape_string($_POST['email']);
?>
Zusammenfassung
Sicherlich gibt es noch viele weitere Möglichkeiten. Die hier beschriebenen
Möglichkeiten sind aber durchaus wirksam und sicher.
Zusammenfassend noch einmal eine "sichere" .htaccess:
php_flag register_globals 0
php_flag magic_quotes_gpc 0
php_flag magic_quotes_runtime 0
und eine php.ini:
register_globals = Off
magic_quotes_gpc = Off
magic_quotes_runtime = Off
magic_quotes_sybase = Off
Hinterlasse einen Kommentar