• 08-07-2014, 18:41:28
    #1
    Üyeliği durduruldu
    Merhabalar arkadaşlar
    Profil sayfası oluşturuyorum şu anda sitem için kodlar şu şekilde;
    <?php 
    	include('header.php');
    	$ka 		= $kontrol->baglan();
    	$ID 		= $_GET['id'];
    	$sorgu 		= $ka->query("SELECT * from members WHERE ID='$ID'") or die("Böyle bir kullanıcı yok");
    	
    	if (isset($_GET['id'])) {
    		while ($row = $sorgu->fetch_array(MYSQLI_ASSOC)) {
    			echo $row['ID'];
    			echo $row['firstname'];
    			echo $row['lastname'];
    			echo $row['avatar'];
    			echo $row['occupation'];
    			echo $row['location'];
    		}
    	} else {
    		echo "Aradiginiz uye bulunmuyor.";
    	}
    
    ?>
    Burda gerçekleştirmek istediğim şey birisi gelip ?id=219847123 yaparsa ve veritabanında bulunmuyorsa hata çıktısı göstermek. GET'in açığı olduğunu biliyordum, bu işlemi GET kullanmadan yapabilmem mümkünse öyle de deneyeceğim.
    Yardımlar için teşekkürler şimdiden.
  • 08-07-2014, 19:06:29
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Sorgudan dönen kayıt sayısını kontrol ettirin. Değer 0'dan büyükse kayıt vardır, içeriği gösterin. Diğer durumda ise kayıt yoktur, hata mesajı gösterirsiniz.

    Ayrıca, $_GET['id'] kısmını intval($_GET['id']) vs gibi kullanın. Bu şekilde güvenli bir kullanım olmaz çünkü. Direkt olarak sorguya gönderiyorsunuz değeri. intval() fonksiyonu tek başına yeterli olmayabilir ama, bunun için farklı güvenlik önlemleri de almanız gerekebilir. Geçenlerde forumda şu konuda böyle bir fikir alışverişi geçmişti. İnceleyebilirsiniz.
  • 08-07-2014, 19:07:54
    #3
    Üyeliği durduruldu
    Aslında doğru, scriptin bir çok bölümünde bunun gibi kod yapısını kullandım da, insanlar basit noktayı kaçırıyor bazen. Ya da ben kaçırıyorum Teşekkür ederim cevabınız için.
  • 08-07-2014, 19:48:38
    #4
    Kimlik doğrulama veya yönetimden onay bekliyor.
    İlk başta desc limit 1 ile son id yi çekin ardından gelen veriyle karşılaştırın hocam, eğer gelen veri çekilen id den büyük veya sayısal değilse hata mesajı versin.

    is_numeric($degisken) sayısal olup olmadığını bu komutla bulabilirsiniz hocam.
  • 09-07-2014, 09:24:53
    #5
    sawashan adlı üyeden alıntı: mesajı görüntüle
    İlk başta desc limit 1 ile son id yi çekin ardından gelen veriyle karşılaştırın hocam, eğer gelen veri çekilen id den büyük veya sayısal değilse hata mesajı versin.

    is_numeric($degisken) sayısal olup olmadığını bu komutla bulabilirsiniz hocam.
    bence mantıken etkilenen satır sayısına bakcaksın

    queryle çekip etkilenen satır varsa
    üye id çekceksin
    yoksa
    böyle bir kullanıcı yok diceksin bence mantık bu aşağıdada örnek kodları incele bence

    <?php
    $sql = "SELECT COUNT(*) FROM fruit WHERE calories > 100";
    if ($res = $conn->query($sql)) {
    
        /* Bu deyimden etkilenen satır sayısına bakalım */
      if ($res->fetchColumn() > 0) {
    
            /* Gerçek SELECT deyimini kullanarak sonuçları alabiliriz */
             $sql = "SELECT name FROM fruit WHERE calories > 100";
           foreach ($conn->query($sql) as $row) {
               print "Meyve: " .  $row['NAME'] . "\n";
             }
        }
        /* Etkilenen satır yokmuş; gereğini yapalım */
      else {
          print "Sorguyla eşleşen satır yok.";
        }
    }
    
    $res = null;
    $conn = null;
    ?>
  • 09-07-2014, 09:40:49
    #6
    Üyeliği durduruldu
    gelen değerin sadece sayısal kısmını almak için intval() yeterli.
  • 09-07-2014, 11:52:22
    #7
    Kimlik doğrulama veya yönetimden onay bekliyor.
    @Xhenahobia; aşağıdaki verdiğim örnek sizin işinizi göreceğine inanıyorum.

    <?php
    
    	if (filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT))
    	{
    		include('header.php');
    
    		$db = $kontrol->baglan();
    
    		$ID = $_GET['id'];
    
    		$query = $db->query('SELECT * FROM `members` WHERE `id` = ' . $ID);
    
    		$member = null;
    
    		while ($row = $sorgu->fetch_array(MYSQLI_ASSOC))
    		{
    			$member = $row;
    		}
    
    		if ( ! is_null($member))
    		{
    			print_r($member);
    		}
    		else
    		{
    			echo 'Aradığınız kullanıcı veritabanımızda bulunamadı.';
    		}
    	}
    	else
    	{
    		echo 'Lütfen hile yapmalayım.';
    	}
  • 09-07-2014, 12:44:50
    #8
    Kimlik doğrulama veya yönetimden onay bekliyor.
    İlla get yapacağım dersen ?id=219847123?token=hhBjChG5b462Hvdrgm şeklinde token kullabilirsin. Token her girişe bağlı olarak değişir. Dışardan direk girişleri engellemiş olursun.
  • 09-07-2014, 13:57:27
    #9
    Üyeliği durduruldu
    Cevap veren herkese çok teşekkür ederim.
    Kodları en son kendim yazmak için şu şekliyle düzenledim; bu kodda yanlış birşey, atladığım bir şey ya da güvenlik patlağı verecek bir şey var mıdır? Bunu da söyler misiniz inceleyip, minnettar kalırım, ona göre yazım biçimimi v.b değiştirebilirim belki. Şimdiden teşekkür ederim.
    Alıntı
    <?php
    include('header.php');
    $ka = $kontrol->baglan();
    $ID = intval($_GET['id']);
    $sorgu = $ka->query("SELECT * from members WHERE ID='$ID' DESC LIMIT 1") or die("Böyle bir kullanıcı yok");
    $etkilenen = $ka->affected_rows;

    if ($etkilenen > 0) {
    if (isset($_GET['id'])) {
    while ($row = $sorgu->fetch_array(MYSQLI_ASSOC)) {
    echo $row['ID'];
    echo $row['firstname'];
    echo $row['lastname'];
    echo $row['avatar'];
    echo $row['occupation'];
    echo $row['location'];
    }
    } else {
    echo "Aradiginiz uye bulunmuyor.";
    }
    }
    else header("Location: /404.php")

    ?>