• 20-05-2007, 14:01:43
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    GET ile çekilen verilerin güvenilirliğini nasıl test ederiz? Örneğin bas harfe göre listelemede
    Alıntı
    $harf = $_GET["harf"];
    ile çekiyorum. fakat adam her türlü değiskeni atayabilir. bunu nasıl engellerim? arastırdım herkes öğüt vermis süzgeçten geçirin diye ama nasıl geçireceğimizi yazmamıslar harf yoksa denetim yapılabilir (sanıyorum isset idi) belki, baska ne gibi güvenlik sakıncaları doğabilir?
  • 20-05-2007, 14:17:34
    #2
    Üyeliği durduruldu
    isset() içerik tanımlımı diye kullanılıyor
    isnumeric() numeric olup olmadığını kontrol için kullanabilirsin

    intval() injeksiyon vs muhabbetlerinde şu şekilde kullanabilirsin
    Alıntı
    $Deger = intval($_GET['veri']);
    aynı sekilde strval()
    Alıntı
    $Deger = strval($_GET['veri']);
    Harf çekeceksen "TEK KARAKTER"

    Alıntı
    if (strlen($GET['veri'])==1)
    ile kontrol edebilirsin =)
  • 20-05-2007, 14:19:00
    #3
    white list te iyi bir yöntem.
  • 20-05-2007, 14:21:04
    #4
    iyinet'te ejder
    Alıntı
    $harf = $_GET["harf"][0];
    olarak kullanımın ilk karakteri çekeceğini söyledi bu tamamdır peki isset fonksiyonunda içerik tanımlı mı diye bakarken herhangi bir içerik mi yoksa belirli bir içerik mi. benim kullandığım alfabedeki 29 harf bu harfler yoksa islem yapmaması yeterli bir bakıma
  • 20-05-2007, 14:25:44
    #5
    Angelside senin dediğin de söyle bir sey mi?

    Alıntı
    <?
    $olasi_basliklar = array("a","b","c"); // bu böyle gider tüm harfleri yazarım
    if(in_array($_GET["baslik"],$olasi_basliklar)) {
    echo("<title>$_GET[baslik]</title>");
    }
    else {
    die("Olasi saldiri");
    }
    ?>
  • 20-05-2007, 15:44:33
    #6
    Üyeliği durduruldu
    switch kullanabilirsin veya elseif

    if ($get["harf"] = "A")
    $harf = "a"
    elseif ($get["harf"] = "b")
    $harf = "b"
    elseif($get["harf"] = "c")
    $harf = "c"
    ...
    ...
    ...
    ...
    elseif($get["harf"] = "z")
    $harf = "z"

    else
    $harf = "hata"

    if ($harf = "hata")
    head("Location:hata.php)

    ---------

    gibi bişiler yaparsın ama çok uzun olur 29 harfi girmek, sunucuyuda kasabilir ama güvenlidir 29 seçenekten biri değilse senin istediğin olur
    (uzun zamandır php yazmadım if-else yapıları yanlış olabilir kusura bakma)
  • 20-05-2007, 15:46:37
    #7
    evet, beyaz liste ile sadece kullanılabilecekleri tanımlıyoruz. Tabi a-z ye yazmak yerine düzenli ifadeleri kullanabilirsin.

    Ama ilk karakteri de almak güzel olmuş, nasılsa tek karaktere ihtiyacın var.



    Öyle switch biraz kalabalık olmaz mı ?
  • 20-05-2007, 15:48:29
    #8
    Üyeliği durduruldu
    kalabalık olur tabi hatta belki kasarda ama güvenli olur dimi
  • 20-05-2007, 15:59:57
    #9
    of çok uzun olmus tyranid o valla Angelside hangi düzenli ifade bu isi görür? daha önce böyle fonksiyona rastlamamıstım da
    not: simdi arastırdım da sanırım array([a-z]) olacak değil mi? yani kod bu hale geliyor:

    <?
    $olasi_basliklar = array([a-z]);
    if(in_array($_GET["baslik"],$olasi_basliklar)) {
    echo("<title>$_GET[baslik]</title>");
    }
    else {
    die("Olasi saldiri");
    }
    ?>