PHP - include per GET-Parameter

Aber auch nur dann, wenn du nicht tatsächlich auf die Idee kommst, eine Verzeichnisstruktur für die Unterseiten aufzubauen. Dann müsstest du den slash ja wiederum zulassen...
 
Dann kann man ja einfach noch auf ".." prüfen.. Wenn man dann nur guckt, ob es irgendwie drin ist, kann man zwar keine Dateien mehr so benennen (z.B. "file..blabla.php"), aber wer benennt schon Dateien so "merkwürdig". :ugly:
 
Also die einzige Variante wie ich den ".." hack wirklich verhindern kann is wenn ich folgendes mach:
PHP:
$path = realpath("./jail/".$_PAGE.".php");
$jail = dirname(__FILE__)."/jail/";
if(strpos($path,$jail)<0)
  die("Not inside my jail.");
Damit evaluier ich den Pfad auf dem Betriebssystem und checke dann dass die Jail im richtigen Folder is. Alles andere kann man relativ einfach umgehen :D
 
Zuletzt bearbeitet:
Man sollte beim File Upload einen Ordner wählen der nicht auf Systemebene liegt, und jeden Dateinamen nach Namensrichtlinien prüfen.
Da gibts eben kein ".." oder "\" oder "/" oder sonstwas.
Dazu kann man bestimmte Endungen sperren, etc ...
Am besten einen Uploadordner in seinem eigenen Home (kein RootAccount) eins unter dem public_html.
Naja wer CMS einsetzt, sollte sich vorher auch damit auskennen, welche Schwachstellen sowas mitsichbringt.
Selbstgemacht ist immer noch das Beste !
 
Das mag sein, das 99% so schlecht coden.
Bestimmte Dinge solltet ihr dann wohl mal in einen 2 Sammelthread packen.
Wie z.B. man sollte nie GET Parameter einfach so includen - Whitelist ...

Ich werte jede POST GET HEAD Anfrage auf meinen Sachen aus.
Suche nach denen, die für die Anwendung wichtig sind, die andern werden
vernachlässigt -> trash oder prallen halt einfach ab.

Jedem das seine, aber ich weiß, was ich mach, das funktioniert so wie ich es will, und kein Anderer!
 
99% hier coden unsicherer als die Entwickler eines der großen CMS ;)

Hauptsache es funktioniert :ugly:. Aber das muss jeder selbst wissen wie weit und ob man sich mit der Materie beschäftigt. Ansonsten gilt:

PHP:
if( 1 == '1+1' && 0 == 'php' && true == '42' ) {
  header( 'Location:https://www.php.net/operators.comparison' );
}
 
solange du auch weißt, warum diese Paradebeispiele funktionieren, dann ist gut.

Neija es gibt da weiter mehr als einfach nur Parameter prüfen, aber das ist ja nicht Sinn des Themas.
 
solange du auch weißt, warum diese Paradebeispiele funktionieren, dann ist gut.

Neija es gibt da weiter mehr als einfach nur Parameter prüfen, aber das ist ja nicht Sinn des Themas.

Der Grund ist mir bekannt. Das ist aber schon der Beginn des Unsicheren, abgesehen von diversen Injektions - und Hijacking-Verfahren. Aber das ist ein anderes Thema, also zurück zum eigentlichen :D.
 
Bestimmte Dinge solltet ihr dann wohl mal in einen 2 Sammelthread packen.

Die Idee find' ich gut, so nach dem Motto "101 Things you do not want to do!"

Wobei ich denke dass der Threadersteller das wohl selber schon wusste, ich poste ja auch keinen echten Produktiv Code sondern nur abgeaenderte Sachen :evil: