Ich hab nen kleines Sicherheitsproblem mit php...

BlueDragon

Held
Mitglied seit
25.08.2005
Beiträge
208
Hallö


ich, als php-noob, habe ein kleines Sicherheitsproblem bei meiner ersten und wahrscheinlich auch letzten php-"Arbeit"...

mit dem Befehl
Code:
<?php readfile("$site"); ?>
füge ich dort eine html-datei ein, indem in der Adresszeile zum Beispiel
---.de/index.php?site=news.html steht

statt "news.html" kann man da aber natürlich auch eine andere Domain eingeben zB. ---.de/index.php?site=http://www.sdc-forum.de

und wenn jetzt irgendein böser Bub das mit einem schädlichen script oder so macht, wer weiß...


Meine Frage ist jetzt: Wie kann man den Parameter $site so durchsuchen, dass, falls ein http:// enthalten ist, auf die Startseite umgeleitet wird?

Wie gesagt, ich hab weniger Ahnung von php-Befehlen, bin mehr der html-Typ ^^
Ich hab auch schon im Internet gesucht, aber leider nix brauchbares gefunden...


Schonmal Danke! :)
 

Rici

Welsh Cat
Teammitglied
SDC-Team
Mitglied seit
23.08.2001
Beiträge
5.843
Mit
PHP:
if(strtolower(substr($site, 0, 7)) == "http://")
kannst Du überprüfen, ob die ersten sieben Zeichen Deiner Eingabe "http://" enthalten. Daraus könnte man dann etwas basteln wie
PHP:
if(strtolower(substr($site, 0, 7)) == "http://") {
 $site = news.html;
 }
 
OP
OP
B

BlueDragon

Held
Mitglied seit
25.08.2005
Beiträge
208
Jaaa,, es geht! Danke!!! :)

ich hab den Code noch ein bisschen verändert (hat sich also doch gelohnt, in der Schule Info zu haben, auch wenn bisher kein php kam)


PHP:
<?php

if(strtolower(substr($site, 0, 7)) == "http://") { 
 readfile("news.html"); 
 }  else
 {
 readfile("$site"); 
}

?>
 
Zuletzt bearbeitet:

Evilmachine

Manaheld
Mitglied seit
14.11.2003
Beiträge
1.170
Das beste ist das aber auch nicht.

man könnte immer noch ftp://, https:// usw. nehmen um Dateien einzuschleusen und eventuell sogar ausführen zu lassen.
 
OP
OP
B

BlueDragon

Held
Mitglied seit
25.08.2005
Beiträge
208
sooo

stimmt, da hatte ich jetzt gar nicht dran gedacht...

ich hab das denne mal erweitert:
PHP:
if(strtolower(substr($site, 0, 4)) == "http" or strtolower(substr($site, 0, 6)) == "ftp://") { 
 readfile("news.html"); 
 }  else
 {
 readfile("$site"); 
}
das kann man also jetzt noch beliebig erweitern... Was mich zur Frage bringt, welche relevanten Protokolle es eigentlich noch so gibt?
Wikipedia sagt dazu:
Anwendung HTTP FTP SMTP POP3 Telnet DNS SNMP SSH IPFIX
Transport
TCP UDP SCTP
Internet
IP (IPv4,IPv6) RIP
welche von denen sind denn jetzt relevant? (klar, ich könnte jetzt einfach alle einbauen, aber man will seine Scripte ja immer geschwindigkeitsoptimiert schreiben. Außerdem hab ich mal gelesen: "Informatiker sind von Natur aus Faul" :D
 

Rici

Welsh Cat
Teammitglied
SDC-Team
Mitglied seit
23.08.2001
Beiträge
5.843
Ich würde das System als solches einfach umstellen... mein Lösungsvorschlag oben bezog sich ja nur auf die Fragestellung

Wie kann man den Parameter $site so durchsuchen, dass, falls ein http:// enthalten ist, auf die Startseite umgeleitet wird?
Dass das gewählte System günstig ist, hab ich nie behauptet! ;)

Soll denn jeder Besucher etwas in die Adresszeile eintragen können? Oder geht es um anklickbare Links, die einfach eine andere Seite öffnen sollen?
 
OP
OP
B

BlueDragon

Held
Mitglied seit
25.08.2005
Beiträge
208
aso (ich komm mir vor wie im Infounterricht, erst macht man was und dann wars doch nich der beste Weg :D )
also es handelt sich hier um anklickbare links!
Wie wäre denn jetzt das "günstige System"? ;)
 

Evilmachine

Manaheld
Mitglied seit
14.11.2003
Beiträge
1.170
Ich würde es ganz einfach machen.

Ich würde die html dateien in nen Unterordner content packen.
Dann beim Aufruf prüfen ob die Datei des parameters site in dem Ordner existiert.
Wenn dies nicht der Fall ist gehts zur Startseite.
sähe dann so aus

PHP:
if (file_exists("content/" . $_GET['site'])
{
readfile ("content/" . $_GET['site']);
}
else
{
readfile ("content/news.html");
}
Ganz simple sache.
 
OP
OP
B

BlueDragon

Held
Mitglied seit
25.08.2005
Beiträge
208
ok, danke, ich denke damit ist es jetzt getan ^^
in der ersten Zeile fehlt übrigens noch ne Klammer am Ende (deshalb hats zuerst nich geklappt), aber jetzt ist alles paletti!
 
Oben