Konular

PHP’de Resim Doğrulama - Güvenlik Kodu

Son yıllarda üyelik formlarında, üyelik giriş sayfalarında, whois sorgularında, sipariş formlarında vs form işleminin gerçekleştiği tüm platformlarda güvenlik kodu / resim doğrulama işlemine rastlamış olmalısınız. Spam botları ve saldırılar gibi sebeplere ayrılsada temel amaç kötü niyetli kullanıcılar/kişilerden korunmada ek bir önlem daha almaktır. Animated Captcha (Hareketli resim doğrulama ) yazısından sonra gelen talep üzerine bilinen resim doğrulama uygulamasına bir örnek sunma gereği gündeme geldi. Örneklemenin daha net anlaşılması için resmi oluşturma, form doldurma ve sonuç basma sayfaları ayrı yapılmıştır. Bu örneği sitenizde çalıştırmak için GD desteğinizin olması gerekmektedir. phpinfo() çıktısında görebilirsiniz. Konsol erişimi olan arkadaşlar php -m komutunu uygulayarak GD modulu kontrol edebilirler...

www.dijitalders.com


Form Sayfası : index.php

<!-- Tarayıcı ön belleğinde tutulmaması için no-cache -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//TR" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="TR" lang="tr">
    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Expires" content="-1" />
    <title>wmturk.net - Resim doğrulama uygulamasına ait demo</title>
    <form method="post" action="sonuc.php">
        Dogrulama Kodu: <img src="img.php" height="25" width="75" />
        Doğrulama Kodunu Giriniz: <input size="6" maxlength="6" name="kod" type="text" />
        <input value="Test et" type="submit" />
    </form>
</body>
</html>

Resim Oluşturma Sayfası: img.php

<?php
session_start();
/* Olusturulan kodu diger sayfalara tasiyabilmemiz icin oturum baslatiyoruz.
  0-999 araliginda bir sayi olusturup bunu md5 ile sifreliyoruz.
 */

$md5yap = md5(rand(0, 9999));

//md5 ile sifrelenen sayimizin uzunlugu 32 karakter olacaktir. Biz 6 karakterli alacagiz.
$dogrulamakodu = strtoupper(substr($md5yap, 8, 6));

//Dogrulama icin kullanicak kodumuzu acilan oturuma kaydediyoruz.
$_SESSION["dogrulamakodu"] = $dogrulamakodu;

//Resim boyutlari belirleniyor
$en = 75;
$boy = 25;

//Uzerinde calisacagimiz resim olusturuluyor.
$image = ImageCreate($en, $boy);

//Beyaz,Siyah ve Kirmizi renkler olusturuyoruz. Rakamlar renkleri ifade etmektedir.
$beyaz = ImageColorAllocate($image, 255, 255, 255);
$siyah = ImageColorAllocate($image, 0, 0, 0);
$kirmizi = ImageColorAllocate($image, 242, 0, 0);

//Arka plani beyaz yapiyoruz
ImageFill($image, 0, 0, $beyaz);

//Olusturulan dogrulama kodunu resime yaziyoruz.
ImageString($image, 6, 9, 5, $_SESSION["dogrulamakodu"], $siyah);

//Gorunumu biraz karistirmak icin cizgilerle gorunumu zorlastiriyoruz.
//Dilerseniz imageline() satirlarini kaldirarak cizgileri yok edebilirsiniz.
imageline($image, 0, 2, $en, 2, $kirmizi);
imageline($image, 0, 25, $boy, 0, $kirmizi);
imageline($image, $en, $boy, 40, 0, $kirmizi);
imageline($image, 0, 23, $en, 23, $kirmizi);

// Tarayiciya dosyamizin tipini yolluyoruz.
header("Content-Type: image/jpeg");

//Resmimizi Jpg formatinda basiyoruz.
ImageJpeg($image);

//Bir kereye mahsus kullanacagimiz icin siliyoruz.
ImageDestroy($image);
exit();
?>


Sonuç Sayfası: sonuc.php  

<?php
session_start();
// Eger form doldurulmussa
if (isset($_POST['kod'])) {
    if (strtoupper($_POST['kod']) == $_SESSION['dogrulamakodu']) {
        echo '<h4>Tebrikler, Doğru kodu girdiniz: <code>' . $_POST['kod'] . '</code></h4>';
    } else {
        echo '<h4><code>' . $_POST['kod'] . '</code>Hatali giris, tekrar deneyiniz. ' . $_SESSION['dogrulamakodu'] . '</h4>';
    }
    echo '<a href="index.php">Tekrar _fcksavedurl=""index.php">Tekrar" _fcksavedurl=""index.php">Tekrar" dene?</a>';
} else {
    ?>
    <a href="index.php">Sadece post verileri ile calisan bir sayfadir. Giris sayfasina donebilirsiniz.?</a>
<?php
}
?>

 

Yorumunuzu Ekleyin
PHP’de Resim Doğrulama - Güvenlik Kodu Yorumları +4 Yorum
  • mert unal
    1
    mert unal
    Kayıt formu: <form name"loginfrm" action"kaydol.php" method"post"> <table> <tr> <td width"100"> &nbsp;&nbsp;<font class"icerikmenu">Adınız</font> </td> <td align"right" width"150"> <input type"text" name"ad" class"kutucuk"> </td> </tr> <tr> <td width"100"> &nbsp;&nbsp;<font class"icerikmenu">Soyadınız</font> </td> <td align"right" width"150"> <input type"text" name"soyad" class"kutucuk"> </td> </tr> <tr> <td width"100"> <td colspan ''2''> ile işaretli alanların girilmesi zorunludur<br> &nbsp;&nbsp;<input type"submit" name"gonder" value"Kayıt ol"> </td> </tr> </table> Hocam elimde şöyle bir kayıt scripti var ama bu kullanıcılar solda gözüküyor.ekranın sağında gözükmesi için ne yapmalıyım.
    25 Ocak 2013 17:22:41, Cuma
  • Mustafa
    1
    Mustafa
    hocam localde sorunsuz çalıştı ancak yayına attığımda resim gelmıyor bir türlü, nasıl çözebilirim. Natro sunucuda barındırıyorum sitemi
    24 Nisan 2014 15:18:07, Perşembe
  • Admin
    1
    Admin
    Suncunuzda phpinfo; ile GD eklentisi varmı kontrol edin...GD eklentisi yoksa, resim işlemleri uygulanmayacaktır, sevgili Mustafa
    26 Nisan 2014 00:26:25, Cumartesi
  • V_V
    1
    V_V
    Tarayıcıdan Resim gösterme kapatılırsa captche session u başlatamayacak ve boş olarak enter a basıldığında giriş yapacaktır. Kodlarda açık var.
    04 Eylül 2017 12:24:27, Pazartesi

While Döngüsü
For Döngüsü
Foreach Döngüsü
Dizi  Kullanımı
$_SESSION
Basit POST veya GET Değişkenlerini Filitreleme
Cookie Kullanılmış Bir Login Ekranı Oluşturma
Yükleniyor...