Sicher vor CrossSiteScripting?

Hi,wenn ich auf ner Seite
PHP:
include('content/'.$_GET[path]'.php');..
hab bin ich dann sicher,insofern das keiner mehr fremde Seiten includieren kann?

Danke im voraus,
Xalon
 
Hallo,
nein dann bist du nicht sicher.

Die einzig sichere Methode ist, die erlaubten Dateinamen in einem Array oder einer DB zu speichern.
Der User übergibt dann eine ID, und dann wird die Datei mit der ID aus dem Array/DB ausgelesen, und der gespeicherte Dateiname wird included.

Alles andere ist Unsicher
 
<?PHP
switch ($_GET['blah']) {
case 'seite1'
include('seite1.php');
break;
case 'seite2'
include('seite2.php');
break;
case 'seite3'
include('seite3.php');
break;
}
?>

Ich hätte nun gedacht sowas sei auch sicher, der grenzts ein... Ist zumindestens sicherer wie das oben genannte
 
@Elderan:

Wieso sollte das:
PHP:
<?php include('content/'.$_GET[path]'.php');.. ?>
...so unsicher sein? ?(
Schließlich wird hier bereits verhindert, dass Skripte (natürlich noch nicht interpretiert) von anderen Servern inkludiert werden. Und das ist ja das Schlimmste was passieren kann.
Das einzige was hieran etwas unsicher erscheint ist die Tatsache, dass man sich jede beliebige .PHP-Datei in 'content/' und seinen Unterverzeichnissen anschauen kann, unabhängig ob diese Datei für die Inkludierung erstellt worden ist.


MfG, BattleMaker
 
@ivegotmail & elderan:
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.

und wer hat heutzutage noch einen offenen anonymen ftp-zugang auf seinem server, wenn er darauf kunden hostet?

cYa
 
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.
 
@Elderan: mein post war jetzt eher auf die serversicherheit und nicht die scriptsicherheit bezogen; wenn du solche codebeispiele anführst, ist es natürlich unsicher ;)

cYa
 
Original von crystal
@Elderan: mein post war jetzt eher auf die serversicherheit ...

Heute was schönes dazu gelesen.

Also noch mal kurz der Thread zusammengefasst: Ist es ein großes Sicherheitsrisiko wenn der User beliebige Includes in einem Script laden kann, sofern man vorher überprüft ob diese auf dem eigenem Server liegen (also man keinen fremden Code einschleusen kann).

Im zweiten Advisory beschreiben die Entwickler, wie ein Angreifer mit Schreibrechten im TWiki-System durch eine rekursive Include-Anweisung in der editierten Seite innerhalb weniger Minuten den Webserver vollständig lahmlegen kann. Dieser fülle durch die wiederholte Einbindung derselben Seite seinen gesamten Hauptspeicher und erhole sich typischerweise erst nach einem vollständigen Neustart von dem Angriff.

Sicherheitslücken in TWiki vom 28.03.06
Advisory der TWiki-Entwickler

Wie man sieht, sollte man es vermeiden, dass der User Einfluss auf die zu include() ladene Datei hat.
 
Zurück
Oben