• 25-09-2012, 13:56:20
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Arkadaşlar selamlar,

    Sitemde şu an ciddi güvenlik açıkları var. Bunları kapatabilmek için sizden yardım rica ediyorum. Zira bu konu hakkında çok fazla bir bilgim yok malesef.

    İlk olarak formlarımdan başlamak istiyorum.

    <?php
    if ($_POST){//Formdan veri gönderildiyse
    
      
    
        $Ad_Soyad=$_POST["Ad_Soyad"];
        $Eposta=$_POST["Eposta"];
        $Mesaj=$_POST["Mesaj"];
    	$Yorum_Yapilan_Yer=$_POST["Yorum_Yapilan_Yer"];
    	$Yorum_Yapilan_ID=$_POST["Yorum_Yapilan_ID"];
    	$Tarih=$_POST["Tarih"];
    		
    	$kontrol=mysql_query("INSERT into Yorumlar (Ad_Soyad, Eposta, Mesaj, Yorum_Yapilan_Yer, Yorum_Yapilan_ID, Tarih) values ('$Ad_Soyad','$Eposta','$Mesaj','$Yorum_Yapilan_Yer', '$Yorum_Yapilan_ID', '$Tarih')");
    	
    	if ($kontrol){
    	?>
    Burada işlem başarılıyla yorumunuz ulaştı vs yazısı geliyor. eğer post ile gelen veri yoksa aşağıdaki formu çıkartıyor.

    <form name="form1" action="yorum_onay.php" method="post">
        <input type="hidden" name="Yorum_Yapilan_Yer" value="<?php echo $Yorumluk; ?>"/>
        <input type="hidden" name="Yorum_Yapilan_ID" value="<?php echo $YorumlukID; ?>"/>
        <input type="hidden" name="Tarih" value="<?php echo date("Y-m-d"); ?>"/>
      <table width="100" border="0" align="left">
      <tr>
        <td align="left" valign="top">Adınız</td>
        <td align="left" valign="top">:</td>
        <td align="left" valign="top"><input name="Ad_Soyad" type="text" /></td>
      </tr>
      <tr>
        <td align="left" valign="top">E-Posta Adresiniz</td>
        <td align="left" valign="top">:</td>
        <td align="left" valign="top"><input name="Eposta" type="text" /></td>
      </tr>
      <tr>
        <td align="left" valign="top">Yorumunuz</td>
        <td align="left" valign="top">:</td>
        <td align="left" valign="top"><textarea name="Mesaj" cols="22" rows="3"></textarea><br /><em><span class="kucuk_yazi">Tüm alanları doldurmak zorunludur!</span></em><br /><input type="submit" name="gonder" value="Kaydet"/></td>
      </tr>
    </table>
    </form>
    Ancak bu form görüldüğü üzere kabak gibi açık. ne bütün kutucuklar doldurulmuş diye kontrol yapıyor ne de injection felan gibi mevzulara karşı koruması var.

    Bu konuda yardım talebindeyim
  • 25-09-2012, 17:57:14
    #2
    Eğer mümkün olan en üst düzeyde güvenlik sağlamak istiyorsan mutlaka bir php framework kullanmanı tavsiye ederim. Bu fazlaca zaman kaybettirecektir ve işleyen bir siteyi tekrar yazmak anlamına gelmektedir.

    Ama mevcut halinde küçük değişikliklerle basit önlemler almak için $_POST'ları değişkenlere aktardığın yerlerde addslashes(htmlspecialchars(trim($_POST['x']))); gibi bir modifiyeye gidebilirsin.
  • 25-09-2012, 18:28:58
    #3
    framework gibi şeylere girmek istemiyorum. siteyi şu haline kadar kendim getirdim (buradaki arkadaşlardan da güzel destekler aldım) %80i bitti diyebilirim. zaten ülkeler arası savasa sebep olacak bilgiler saklamıyorum sadece alınması gereken tedbirleri alıp bişey yapmak isteyene çok fazla açık kapı bırakmasam yeterli.

    bu yukarıda verdiğiniz kodun örnek bir kullanımını rica edebilir miyim? Örnek üzerinden gitmek daha kolay oluyor da
  • 25-09-2012, 18:29:04
    #4
    boşluk kontrolu için

      <?php
          if(empty($_POST["Ad_Soyad"]) or empty($_POST["Eposta"]) or empty($_POST["Mesaj"])){
      echo "bütün alanları doldurmadınız.";
      die();
    }
      ?>
    bu kodu $post tan sonra koyarsan formdaki alanlarida php iel kontrol etmiş olursun aynı kontrolu js ilede yapabilirsin. google de küçük bi araştırma yeterli olur. ayrica flood önlemek için güvenlik kodu kullanabilirsin.
  • 25-09-2012, 18:33:08
    #5
    cava mantıklı ben boşluk için biraz araştırayım bunu teşekkür ederim
  • 25-09-2012, 21:32:17
    #6
    Ayrıca mysql_real_escape_string ve strip_tags gibi fonksiyonlara da bakmalısınız.
  • 26-09-2012, 02:05:18
    #7
    Üyeliği durduruldu
    Fonksiyon :
    function guvenlik($q) { 
    	$q = htmlspecialchars(stripslashes($q));
    	$q = str_replace("script", "blocked", $q);
    	$q = str_replace("select", "", $q);
    	$q = str_replace("SELECT", "", $q);
    	$q = str_replace("UPDATE", "", $q);
    	$q = str_replace("update", "", $q);
    	$q = str_replace("delete", "", $q);
    	$q = str_replace("DELETE", "", $q);
    	$q = str_replace("UNION", "", $q);
    	$q = str_replace("union", "", $q);
    	$q = str_replace('"', "", $q);
    	$q = str_replace("%", "", $q);
    	$q = mysql_escape_string($q);
    	$q = str_replace("`","",$q);
    	$q = str_replace("'","'",$q);
    	$q = str_replace("-","-",$q);
    	$q = str_replace("&","",$q);
    	$q = str_replace("%","",$q);
    	$q = str_replace("<","",$q);
    	$q = str_replace(">","",$q);
    	$q = trim($q);
    	return $q; 
    }
    Kullanım :

    $adsoyad = guvenlik($_POST['adsoyad']); // Güvenli veri
  • 26-09-2012, 10:14:38
    #8
    bu fonsiyona şöyle bir soruyla gelsem ne cevaplar alırım

    if ($_POST){
    $Ad_Soyad=mysql_real_escape_string(trim($_POST["Ad_Soyad"]));
    şeklinde bir düzenlemem var. bu yeterli mi yoksa yoksa bi üstteki kodları kullanmak şartmıdır?

    ayrıca bu yukarıdaki kodları config.php (her sayfam bunu include ediyor) içine koysam ve hersayfamdaki post get gibi gelen verileri aşağıdaki gibi başına "guvenlik" ekini koysam çalışmasında bir sıkıntı olur mu (belki biraz salakça oldu ama inanın bu konuda tam sıfırım)

    $adsoyad = guvenlik($_POST['adsoyad']);
  • 26-09-2012, 12:25:26
    #9
    Üyeliği durduruldu
    oguzhan306 adlı üyeden alıntı: mesajı görüntüle
    bu fonsiyona şöyle bir soruyla gelsem ne cevaplar alırım

    if ($_POST){
    $Ad_Soyad=mysql_real_escape_string(trim($_POST["Ad_Soyad"]));
    şeklinde bir düzenlemem var. bu yeterli mi yoksa yoksa bi üstteki kodları kullanmak şartmıdır?

    ayrıca bu yukarıdaki kodları config.php (her sayfam bunu include ediyor) içine koysam ve hersayfamdaki post get gibi gelen verileri aşağıdaki gibi başına "guvenlik" ekini koysam çalışmasında bir sıkıntı olur mu (belki biraz salakça oldu ama inanın bu konuda tam sıfırım)

    $adsoyad = guvenlik($_POST['adsoyad']);
    Herhangi bir sayfaya guvenlik fonksiyonunu include edebilirsiniz herhangi bir problem yaşamasınız