Original von Elderan aus
Sicher vor CrossSiteScripting?
Hallo,
naja, nicht wirklich... es ist nur dann unsicher, wenn irgendwelche hohlbratzen von webhostern die möglichkeiten der nutzung von mod_security, openbasedir, seperaten temp-/session-dirs und die sperrung von befehlen wie shell_execute usw. ungenutzt lassen.
auch dann ist es Unsicher.
Immer wenn der User entscheiden kann, welche Dateien includiert werden, ist dies
unsicher.
Denn, was viele nicht glauben, viele erstellte Dateien sind einfach nicht dafür geeignet, inkludiert zu werden, denn dadurch werden ja auch Variablen überschrieben.
Bsp:
PHP:
<?php
//Vars initialisieren
$log = false;
//Include
include("funktionen.php");
include('content/'.$_GET[path]'.php');
if($_SESSION['admin'] == "jo")
$log = true;
if($log == true)
//Zeige Adminfunktionen
else
//Erst einloggen
?>
Wenn ein Angreifer es jetzt schafft,
irgendeine Datei zu finden, in der die Variable $log geändert wird, auf einen Wert != false (z.B. 1,2...), dann kann man sich als Admin einloggen, ohne das Passwort zu haben.
Oder anderes Beispiel:
PHP:
<?php
//Vars initialisieren
$username = $_SESSION['username'];
$userid = $_SESSION['userid'];
//Include
include("funktionen.php");
//....
//Menü ausgeben
include('content/'.$_GET[path]'.php');
if(isset($username))
//Zeige Member-Bereich für $username
else
//Erst einloggen
?>
Wenn man jetzt eine Datei findet, in der $username deklariert wird, und diese includiert, so kann man sich einloggen.
Eine Datei kann z.B. so aussehen:
member_search.php:
PHP:
<?php
$username = $_GET['username'];
$suche = "SELECT * FROM users WHERE username = '$username'";
//...
?>
Mit dem Aufruf:
seite_mit_bug.php?username=Admin&path=member_search
Könnte ich mich als 'Admin' einloggen.
Man muss jede Datei überprüfen, ob diese inkludiert werden kann.
Wenn der User selbst die Datei bestimmen kann, muss man jede Datei überprüfen, ob diese Problemlos per include() geladen werden kann.