Passwort vergessen?

Benutzername vergessen?

Alles rund um IT, Web und Entwicklung.
Von Nutzern für Nutzer.

(PHP) Sicherheit



Diese Anleitung gibt eine Übersicht, wie sie Ihre PHP Anwendungen gegen Angriffe absichern.


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


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



Michael Kostka

Fachinformatiker / Systemintegration
Ich schreibe hier regelmäßig zu den Themen Android, Web, Linux und Hardware.

Raspberry Pi Starter Kit

Hinterlasse einen Kommentar

Ich habe die Datenschutzerklärung zur Kenntnis genommen und stimme einer elektronischen Speicherung und Verarbeitung meiner eingegebenen Daten zur Beantwortung der Anfrage zu.