Angriffe durch das Manipulieren von Parametern
Häufig werden bei Angriffen Parameter manipuliert, die an das PHP-Script übergeben werden. Werden Parameter aus superglobalen Variablen wie $_GET,$_POST,$_REQUEST,$_COOKIE ohne Prüfung z.B. an ein SQL-Statement übergeben, wären SQL-Injections problemlos möglich. So könnten Angreifer Datensätze aus der Datenbank auslesen, ändern oder löschen.Übergibt man ungeprüfte Variablen an die PHP-Anwendung, sind nicht nur SQL-Injections möglich, sondern Angreifer haben so auch die Möglichkeit einen schadhaften Code in die PHP-Anwendung zu schleusen und erheblichen Schaden anzurichten.
PHP, ist eine schwach typisierte Sprache. So kann eine Variable mit dem Wert 1 eine Zeichenkette, ein Integer Wert oder ein boolscher Wert sein. Parameter, die über ein Formular oder der URL übergeben werden, werden grundsätzlich als String übergeben. Darin können Zeichen enthalten sein, die unerwünscht sind. Deswegen solltet Ihr. bevor Ihr was mit der Variablen macht, diese in den gewünschten Datentyp umwandeln. Ausgenommen man möchte den String weiterverarbeiten, dann ist eine Typumwandlung weniger sinnvoll.
PHP bietet für die Typumwandlung einen Cast-Operator an. Damit habt Ihr die Möglichkeit, den Datentyp in Klammern, vor der umzuwandelnden Variable zu setzten um so eine Typisierung durchzuführen bzw. zu erzwingen.
Beispiel:
$user = (int) $_GET['user_id'];
?>
Für den Cast-Operator gibt es folgende Typenbezeichnungen:
- int − Für Ganzzahlen
- float − Fließkommazahlen
- bool − Boolsche Werte true oder false
- string − Zeichenkette
- array − arrays
- object − für Klassen
- null − NULL Werte
Beispiel:
$string = '<b>Ich bin ein Text</b>';
echo $string;
?>
Beispiel:
$string = '<b>Ich bin ein Text</b>';
echo strip_tags($string);
?>
Beispiel:
$string = '<b>Ich bin ein Text</b><script%gt;alert('und ich auch');</script>
echo $string;
?>
Beispiel:
$string = '<b>Ich bin ein Text</b><script>alert('und ich auch');</script<
echo strip_tags($string,"<b>");
>?
Eine weitere Möglichkeit, ungültige Inhalte zu filtern, ist die Whitelist-Überprüfung.
Beispiel:
<select name="anrede">
<option value="frau">Frau</option>
<option value="herr">Herr</option>
</select>
</form>
Beispiel:
$clean = array();
$anrede = array('frau','herr');
if( in_array($_POST['anrede'],$anrede) ){
$clean['anrede'] = $_POST['anrede'];
}else{
echo 'fehler';
}
?>