Archivlink: javarea.de Forum > PHP, MySQL & CGI > Sicherheit bei PHP
Vollständigen Link anzeigen: javarea.de Forum > PHP, MySQL & CGI > Sicherheit bei PHP

Pages: [1]

geschrieben von phpneu am 28.01.2010 - 17:44
Hallo,
kann man mir jemand sagen, warum man bei PHP immer auf Sicherheit achten musss angeblich?
Hab in dem http://www.php-lernen.org/ hier gelesen man müsste immer alle Eingaben maskieren, weil sonst Hacker
was einschleusen können. Aber das klingt mir etwas komisch. Warum macht PHP denn sowas nicht von selbst? Das kann man in der Konfiguration von
PHP sicher einstellen das es das automatisch macht oder?

geschrieben von Danny am 29.01.2010 - 17:01
Hallo phpneu,

grundsätzlich sollte man nie auf Benutzereingaben vertrauen. Egal welche Sprache oder welches Szenario. Nicht nur weil manch einer etwas Böses will, sondern häufig einfach weil Benutzer anders denken als man selbst.

Bevor ich jetzt große Texte schreibe, verweise ich auf den Wiki Artikel "SQL-Injection" als ein Grund warum Eingaben nicht einfach in eine Datenbank geschrieben werden sollten.

http://de.wikipedia.org/wiki/SQL-Injection

Andereres Beispiel auf das der php-lernen Link hinaus will:

Du hast ein Benutzereingabefeld, nach der Eingabe speicherst du diese und gibst sie wieder aus. Wie ein Gästebuch.
Der Einfachheit halber ist die Benutzereingabe in der Variable $benutzereingabe gespeichert.
Ich als böser Benutzer gebe nun folgendes in dein Feld ein:

HTML-Quelltext
1: 
<script type="text/javascript">alert("Hallo!");</script>


dann haben wir in Fall 1 unmaskiert:

PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 

<?php
$benutzereingabe 
'<script type="text/javascript">alert("Hallo!");</script>';

echo 
$benutzereingabe;
?>



Du gibst das Javascript aus, es wird interpretiert und ein Alertfenster erscheint. Und darauf hattest du keinen Einfluss, weil es der Benutzer eingegeben hat.

Fall 2 maskiert:

PHP-Quelltext
1: 
2: 
3: 
4: 
5: 
6: 
7: 
8: 
9: 

<?php
$benutzereingabe 
'<script type="text/javascript">alert("Hallo!");</script>';
$benutzerausgabe  htmlspecialchars($benutzereingabe);
 
echo 
$benutzerausgabe;

?>



mit htmlspecialchars werden Sondereichen z.B. das < in ein &lt; gewandelt. Bei der Ausgabe wandelt der Browser das &lt; in ein < zurück. Es ist diesmal aber ein Zeichen und wird nicht interpretiert. Ausgabe ist ein harmloses

Zitat
 <script type="text/javascript">alert("Hallo!");</script>



Automatisch machen kann man soetwas nicht. Es gibt in der php.ini die Option magic_quotes_gpc die maskiert automatisch alle ", ' und \ in $_POST,$_GET und $_COOKIE. Sie führt also automatisch die Funktion addslashes() aus.

Allerdings empfehle ich das nicht. Erstens gibt es auch Fälle in denen das unerwünscht ist, man hat keinen Einfluss darauf wenn dein Skript mal auf einer anderen PHP Konfiguration läuft und in PHP5.3 ist sie als "deprecated" markiert und in PHP 6.0 wird diese Option gänzlich entfernt.

Gewöhne dir auf Dauer an Benutzereingaben immer zu misstrauen, wenn eine Zahl eingegeben werden soll dann darf dein Skript auch nur weiter arbeiten wenn es wirklich eine Zahl ist ..

Gruß Danny


Powered by: JBB v.2.0.4 Copyright ©2000-2006, www.javarea.de.