regex ve $ _GET

6 Cevap php

I'm making a little site for a friend, noobfriendly, so she can add pages easy. I think I'm just gonna include everything in index.php. So she can just drop a page in a folder named /pages/ and it's done.

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');
}

Bu oldukça güvenli değil mi? Ben sadece harfler a-z izin veriyorum. Ben olacak google gibi büyük bir site olmayacak demek. Peki ben bu yüzden emin olmak için adamlar soruyorum sadece hobbycoder değilim :)

Sen ne düşünüyorsun?

6 Cevap

Sen kullanabilirsiniz this.

ctype_alnum($_GET["page"]);

Bu güvenceye senin regex olduğundan emin olmak için /^[a-z]+$/i. Bu bütün dize (^ başlangıç, $ ve sonudur) sadece alfabetik olduğundan emin olmak için denetler. Sonra iş (en azından bu bölümünde) güvenli olacaktır.

Bunu eklemek için karar vermeden önce bu girişi bazı kontrolleri çalıştırmak için harika bir fikir olacaktır. Bir kere, siz de dahil olmak üzere daha önce bir is_file ($ dosya) yapabilirdi.

Muhtemelen istediğini değil - Bir başka şey, sizin regex yalnızca bir karakter atm izin verecek şekilde ayarlanır. Başka bir şey: önceki poster belirtildiği gibi, regex sadece giriş çeşit ok görünüyor denetler. Bundan sonra, _GET değişkeni kullanın. Eğer yukarıdaki sorunu önlemek için (bunu bir dizi sonuçları atayabilirsiniz olabilir) preg_match'in gelen sonuç kullanabilirsiniz ÖNERİ.

Regards Fake

No a / .. / .. / .. / da regexpi maç olacak

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

Bu şekilde hiçbir izin harflerin dizilimine önce ve sonra orada olduğundan emin olun.

Gerçekten yolları dizeleri düzenleme Tescil sevmiyorum, sen istismar edilebilecek tarayıcılar ve dosya sistemlerinin ne tuhaflıklar asla bilemezsiniz. Ne gerçekten yapmanız gereken aslında kendi girişini kullanabilirsiniz ancak geçerli dosya adları karşı kontrol etmek için kullanabilirsiniz değildir.

Istenen dize bir dosya ise sayfalar dizindeki dosyaların bir listesini almak ve sonra görmek için in_array'in kullanmak için glob veya scandir kullanın. Eğer yol öğelerini dışarı şerit çalışırsanız, bir hata yapmaya açık kendinizi bırakın.

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";
}

Belki mi? 'page' ayarlanırsa 'blabla89349' bu sayfayı içerecektir 'blabla.php'. Ben size amaçlanan ne ise emin değilim? Aksi takdirde bu konuda sıkı olabilir ve

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