2009-06-26 1 views
0

Ich mache eine kleine Website für einen Freund, noobfriendly, so kann sie Seiten einfach hinzufügen. Ich denke, ich werde alles in index.php aufnehmen. Sie kann also einfach eine Seite in einen Ordner mit dem Namen /pages/ legen und es ist fertig.

index.php

if (preg_match('/[a-zA-Z]/', $_GET['page'])){ 
$page = 'pages/'.$_GET['page'].'.php'; 

if ($page) { 
include $page; 
} else { 
exit; 
} 

} else { 
include('pages/home.php'); 
} 

Das ist ziemlich sicher nicht wahr? Ich erlaube nur Buchstaben a-z. Ich meine, es wird keine große Seite wie Google sein. Nun, ich bin nur ein Hobbycoder, also frage ich Leute, um sicher zu gehen :)

Was denkst du?

+0

Ihre Regexp überprüft nur, ob mindestens ein Zeichen [a-zA-Z] ist und alle anderen ignorieren kann – Cheekysoft

Antwort

1

Nr ein /../../../ wird passen auch die regexp

Verwenden '/^[a-zA-Z]+$/'

diese Weise können Sie sicherstellen, dass nichts da ist vor und nach der Reihenfolge der erlaubten Buchstaben.

3

könnten Sie this. verwenden

ctype_alnum($_GET["page"]); 
2

Um dies zu sichern, Ihre regex /^[a-z]+$/i ist sicher. Dies überprüft die gesamte Zeichenfolge (^ ist der Anfang und $ ist das Ende), um sicherzustellen, dass es nur alphabetisch ist. Dann wird Ihre Arbeit sicher sein (zumindest in diesem Teil).

1

Es wäre eine gute Idee, einige Eingaben zu überprüfen, bevor Sie sich entschließen, sie einzuschließen. Zum einen könnten Sie eine is_file ($ filename) vor dem Einschließen machen.

Eine andere Sache, Ihre Regex ist so eingestellt, dass nur ein Zeichen ATM erlaubt - wahrscheinlich nicht das, was Sie wollen. Eine andere Sache: Wie das vorhergehende Poster angemerkt hat, überprüft die Regex nur, ob die Eingabe in Ordnung ist. Danach verwenden Sie die Variable _GET. Sie sollten das Ergebnis von preg_match verwenden (Sie können die Ergebnisse einem Array zuweisen), um das obige Problem zu vermeiden.

Grüße Gefälschte

0
preg_match('/[a-zA-Z]/', $_GET['page'], $match) 

if ($match) { 
    $page = "pages/$match.php"; 
    if(file_exists($page){ 
     include $page; 
    } else { 
     include "pages/404.php"; 
    } 
} else { 
    include "pages/home.php"; 
} 

Vielleicht? Wenn 'page' auf 'blabla89349' eingestellt ist, enthält dies die Seite 'blabla.php'. Ich bin mir nicht sicher, ob Sie das beabsichtigt haben? Sonst könnte man es streng sein und

if ($match == $_GET['page']) { 
... 
1

Ich mag es nicht wirklich reg Strings in Pfaden Bearbeitung aus, man weiß nie, was Macken von Browsern und Dateisystemen kann genutzt werden. Was Sie wirklich tun sollten, ist nicht wirklich ihre Eingabe verwenden, sondern verwenden, um mit gültigen Dateinamen zu überprüfen.

Verwenden Sie glob oder scandir, um eine Liste der Dateien im Seitenverzeichnis abzurufen, und verwenden Sie dann in_array, um festzustellen, ob die angeforderte Zeichenfolge eine Datei ist. Wenn Sie versuchen, Pfadelemente zu entfernen, lassen Sie sich für einen Fehler offen.