• 14-07-2008, 05:58:16
    #1
    Selam Arkadaslar Elimde Kucuk 1 Kayit formu var.
    Yalnız Cok fazla Saldırı Alıyorum
    Umarım Bilginizi Esirgemezsiniz, Simdiden Tesekkürler.
    bu Kucuk Kayıt formuna Nasil Guvenlik Kodu Eklerim?

    <style>
    * { font-family: "Trebuchet MS"; font-size: 12px; }
    </style>
    </head>
    <?php
    if ( empty($_POST) ) {}
    else 
    { 
    	$ka = htmlspecialchars($_POST['ka']);
    	$sifre = htmlspecialchars($_POST['sifre']);
    	$sifre2 = htmlspecialchars($_POST['sifre2']);
    	$mail = $_POST['mail'];
    	$sifre_md5 = md5($_POST['sifre']);
    	
    	$kontrol = mysql_query("SELECT ka FROM uyeler WHERE ka='".$ka."' OR mail='".$mail."'");
    	$say = mysql_num_rows($kontrol);
    	
    	if ( $say >= 1 ) { echo 'Bu kullanıcı adı veya mail adresi ile daha önceden kayıt olunmuş.'; }
    	elseif ( empty($ka) ) { echo 'Kullanıcı adınızı boş bırakamassınız'; }
    	elseif ( empty($sifre) ) { echo 'Şifre alanınızı boş bırakamassınız'; }
    	elseif ( empty($sifre2) ) { echo 'Şifre tekrar alanını boş bırakamassınız'; }
    	elseif (!eregi ("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}$", $mail))
    	{ echo 'Mail adresiniz geçersiz. Lütfen geçerli bir mail adresi yazınız.'; }
    	elseif ( $sifre != $sifre2 ) { echo 'GirdiÄŸiniz ÅŸifreler birbirini tutmuyor'; }
    	else
    	{
    	
    		$uye_ekle = mysql_query("INSERT INTO uyeler (ka,sifre,mail) VALUES ('".$ka."','".$sifre_md5."','".$mail."')");
    		header("Location: kayit.php?kayit=basarili");
    	
    	}
    }
    
    	if ( $_GET['kayit'] )
    	{
    	
    		echo 'Sitemize başarıyla kayıt oldunuz. Kullanıcı menüsü bölümünden giriş yapabilirsiniz.';
    		kapat();
    	
    	}
    	else
    	{
    
    ?>
    
    <form action="kayit.php" method="POST">
    <table>
    <tr>
    <td>Kullanıcı adınız:</td><td><input type="text" maxlength="30" name="ka" /></td>
    </tr>
    <tr>
    <td>Şifreniz:</td><td><input type="text" name="sifre" /></td>
    </tr>
    <tr>
    <td>Şifreniz:(tekrar)</td><td><input type="text" name="sifre2" /></td>
    </tr>
    <tr>
    <td>Mail adresiniz:</td><td><input type="text" maxlength="30" name="mail" /></td>
    </tr>
    <tr>
    <td><input type="submit" value="Kayıt ol" /></td><td>&nbsp;</td>
    </tr>
    </table>
    </form>
    <?php } ?>
  • 14-07-2008, 09:54:18
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Güvenlik kodu uygulaması için örnek

    aşağıdaki kodları guvenlik.php olarak kaydedin.

    <?php
    session_start();
    $width = 350;
    $height = 25;
    $im = imagecreate($width, $height);
    $bg = imagecolorallocate($im, 235, 235, 235);
    $len = 5;
    $chars = '123456789';
    $string = '';
    for ($i = 0; $i < $len; $i++) {
        $pos = rand(0, strlen($chars)-1);
        $string .= $chars{$pos};
    }
    $_SESSION['GuvenlikKodu'] = md5($string);
    $grid_color = imagecolorallocate($im, 185, 185, 185);
    $number_to_loop = ceil($width / 7);
    for($i = 0; $i < $number_to_loop; $i++) {
        $x = ($i + 1) * 7;
        imageline($im, $x, 0, $x, $height, $grid_color);
    }
    $number_to_loop = ceil($height / 5);
    for($i = 0; $i < $number_to_loop; $i++) {
        $y = ($i + 1) * 10;
        imageline($im, 0, $y, $width, $y, $grid_color);
    }
    $text_color = imagecolorallocate($im, 32, 21, 75);
    $rand_x = rand(0, $width - 50);
    $rand_y = rand(0, $height - 15);
    imagestring($im, 10, $rand_x, $rand_y, $string, $text_color);
    header ("Content-type: image/png");
    imagepng($im);
    ?>
    kendi formunuzda sayfanın en başında session başlatın session_start(); sonrada güvenlik kodunu göstermek için ilgili yere şunu ekleyin

    <img src="guvenlik.php">
    son olarak formdan gelen değerleri kontrol ettiğiniz bölüme bir kontrol mekanizması ekleyerek formda girilen güvenlik kodunun resimde basılanla eşleşip eşleşmediğini kontrol ettirin.

    $girilenkod = $_POST['guvenlikkodu'];
    if(MD5($girilenkod)== $_SESSION['GuvenlikKodu'])
    {
    echo "devam";
    }
    else
    {
    echo "Kod Hatalı Girildi";
    }
    kolay gelsin.
  • 16-07-2008, 12:59:58
    #3
    Üyeliği durduruldu
    jagum, Örnek verdiğin kod cok güzel ama en onemli kısmını unutmuşsun yada bilmiyorsun diyelim...
    Ben hiç bişi yapmadan bu kodlarla bu guvenlik kodunu aşarım..
    Nasıl mı?
    $girilenkod = $_POST['guvenlikkodu'];
    if(MD5($girilenkod)== $_SESSION['GuvenlikKodu'])
    {
    echo "devam";
    }
    else
    {
    echo "Kod Hatalı Girildi";
    }
    hem session hemde post değerini işlem sayfasına yani kontrol yapılarının çalıştığı sayfaya boş gönderdiğim zaman guvenlik aşılmış olacaktır
    Buradaki kontrol yapısında dikkat ederseniz $_POST['guvenlikkodu'] Eşitse $_SESSION['GuvenlikKodu'] denilmiş. eğer doğru ise echo devam... değilse hatalı kod...
    Yani if(NULL == NULL ) yani if("" == "") { ...
    Şimdi isterseniz deneyebilirsiniz..
    Soru : Peki ne yapmamız lazım?
    Cevap :
    <?php 
    session_start();
    $girilenkod = md5($_POST['guvenlikkodu']);
    if($_SESSION['GuvenlikKodu'] == NULL)
    echo "Session Değeri Boş Form Sayfasından Geliniz";
    elseif(empty($girilenkod))
    echo "Güvenlik Kodunu Giriniz";
    elseif($girilenkod == $_SESSION['GuvenlikKodu'])
    echo "devam";
    else
    echo "Güvenlik Kodu Hatalı";
    ?>
    Güvenlik Konusunda Eğitişmeniz Dileği İle...
    Kolay Gelsin.
  • 16-07-2008, 13:34:33
    #4
    @Dogu_Bey: $_SESSION['GuvenlikKodu'] nasıl boş değere eşitlenecek acaba ? hadi tamam formu boş gönderirsinde.. guvenlik.php içinde otomatikmen bir $_SESSION['GuvenlikKodu'] oluşuyor. ve bunun bir değeri var.
  • 16-07-2008, 13:36:16
    #5
    Üyeliği durduruldu
    İşlem sayfasına direk giderseniz anlarsınız.

    form.html
    ....
    guvenlik.php
    .....
    islem.php
  • 16-07-2008, 13:58:27
    #6
    o zaman sitedeki form sayfasını kullanmıcağız.
    doğru mu anladim? sitedeki formla değilde..
    aynı yapıda kendimiz bir form yaparsak.. ve guvenlik.php'i bu form'a dahil etmezsek ; yeni bir session açilmayacak. ve GuvenlikKodu isimli session'ın değeri boş olacak.
    sonuc olarak
    boş = boş
    diyip geçirecek bizi : )

    ilk başta sitedeki form alanındaki güvenlik kodu input alanını boş bırakmaktan bahsettiğini sandim ben : )
    boş bırakıp submit etmek sandim : )
  • 16-07-2008, 14:12:35
    #7
    Üyeliği durduruldu
    Alıntı
    sonuc olarak
    boş = boş
    diyip geçirecek bizi : )
    Aynen Öyle.

    Yıllardır PHP ve MySQL Kullanıyorum.
    Yazılım Kontrolleri Yapıp Güvenlik Hakkında Raporlar Hazırlıyorum.
    Ve Hemen Hemen Her Professional Olan bir Programcının bile Bu Tür Hususları Es Geçtiğini Yada Kavrayamadığına Şahidim.

    Tabii Formu gonderirken PHP_SELF kullanılırsa bu işlem yok sayılır yani form.php oalcak kontrol yapıları form.php'nin içinde olacak doğal oalrak guvenlik.php mecbur çalıştırılacaktır. ve Session Değeri Atanacaktır.

    Kolay Gelsin.
  • 17-07-2008, 10:17:04
    #8
    Dogu_Bey adlı üyeden alıntı: mesajı görüntüle
    jagum, Örnek verdiğin kod cok güzel ama en onemli kısmını unutmuşsun yada bilmiyorsun diyelim...
    Ben hiç bişi yapmadan bu kodlarla bu guvenlik kodunu aşarım..
    yanılıyorsun Dogu_Bey, hiç bir şey yapmadan bu kodu aşamazsın , nedenine gelince

    $_SESSION['GuvenlikKodu'] = md5($string);
    değerini güvenlik kodunun oluşturulduğu sayfadan alıyor , sonrasında form aracılığı ile bu stringin md5 lenmemiş halini girmeni istiyor ve işlem yaptığı son sayfada ise her iki değerin md5 li halini kontrol ediyor , yani sen boş değer göndersende bu boş değerin md5 karşılığını yorumlayacaktır.

    buyrun deneyin http://www.edremit.org/guvenlik/

    bahsettiğin şekilde bu güvenlik uygulamasını aşamazsın.

    senin bahsettiğin
    if($_SESSION['GuvenlikKodu'] == NULL)
    echo "Session Değeri Boş Form Sayfasından Geliniz";
    bu kontrol ise tamamen mantıksızca bir kod hamallığından başka birşey değildir. Yıllardır php mysql kullanarak yazılım güvenliklerini test eden birisiysen bu kontrolun ne derece mantıksız ve gereksiz olduğunu idrak etmen lazımdı.

    arkadaşa önerdiğim yolu illakide aşarım gibi bir iddanız varsa http://www.edremit.org/guvenlik/ adresinden deneyebilirsiniz.


    kolay gelsin.
  • 17-07-2008, 12:17:10
    #9
    @jagum: madem anlayamıyorsun kasma
    eğerki guvenlik.php sayfasına girmezsen session açilmayacaktir. ve dolayısıyla değeri boş olacaktır.
    eğerki sen verdiğin adresde şu şekilde yaptıysan

    Alıntı
    Tabii Formu gonderirken PHP_SELF kullanılırsa bu işlem yok sayılır yani form.php oalcak kontrol yapıları form.php'nin içinde olacak doğal oalrak guvenlik.php mecbur çalıştırılacaktır. ve Session Değeri Atanacaktır.
    öyle engellersin.
    fakar
    form.html + guvenlik.php + sonuc.php
    gibi yaptıysan, guvenlik php'i atlayıp direk sonuc.php'e gidildiği takdirde aşılmış olur.