PHP Güvenlik Kodu (Captcha) Yapımı

Formdan alınan verilerin bot veya robot adı verilen yazılımlar tarafından alınmasını önlemek için kullanılan güvenlik kodu veya captcha olarak bilinen yapını yapımı ile ilgili bilgiler yer almaktadır.

Captcha nedir?

CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) veya güvenlik kodu olarak bilinen yapı web sayfalarında bulunan formların kullanıcı tarafından girildiğini garanti etmek için kullanılan genellikle resim tabanlı harf ve rakamlardan oluşan bir yapıdır.

PHP captcha yapımı

PHP ile captcha yapımı için GD kütüphanesinin aktif olması gerekmektedir.

<?php

if (extension_loaded("gd")) {
    echo "GD kurulu.";
} else {
    echo "GD kurulu değil.";
}

?>

PHP ile captcha yapımı için öncelikle rastgele değer üretilmesi ve değerin $_SESSION ile kayıt altına alınması gerekir.

<?php

session_start();

$kod = substr(md5(uniqid(rand(0, 6))), 0, 6);

$_SESSION['kod'] = $kod;

Captcha yapımı için gerekli olan güvenlik kodu oluşturulduktan sonra PHP GD kütüphanesi ile resme üretilen değerin yazdırılmasıyla captcha yapımı tamamlanmış olur.

<?php

session_start();

$kod = substr(md5(uniqid(rand(0, 6))), 0, 6);

$_SESSION['kod'] = $kod;

header('Content-type: image/png');

$kod_uzunluk = strlen($kod);
$genislik = imagefontwidth(5) * $kod_uzunluk;
$yukseklik = imagefontheight(5);

$resim = imagecreate($genislik, $yukseklik);

$arka_renk = imagecolorallocate($resim, 0, 0, 0);
$yazi_renk = imagecolorallocate($resim, 255, 255, 255);
imagefill($resim, 0, 0, $arka_renk);

imagestring($resim, 5, 0, 0, $kod, $yazi_renk);

imagepng($resim);

?>

Yukarıdaki kodlarla basit bir captcha oluşturduk.

Daha zor captcha için yazı ve arka plan renkleri rastgele verilebilir.

$arka_renk = imagecolorallocate($resim, rand(0, 255), rand(0, 255), rand(0, 255));
$yazi_renk = imagecolorallocate($resim, rand(0, 255), rand(0, 255), rand(0, 255));

Hazırlanan captcha uygulamasını daha da zor hale getirmek için ayrıca aşağıdaki gibi çeşitli çizgi eklemeler yapılabilir.

for ($i = 0; $i < 6; $i++) {
    imageline($resim, rand(0, 5) * 10, rand(0, 10), rand(0, 10) * 0, 10, $yazi_renk);
}

Ancak gereğinden zor captcha uygulamaları siteye giren kullanıcılar için istenmeyen durumların oluşmasına neden olabilir.

Captcha uygulamasının kullanımı aşağıdaki gibidir.

<?php
session_start();
if (isset($_POST['guvenlik'])) {
    if ($_POST['guvenlik'] == $_SESSION['kod']) {
        echo "Doğrulama başarılı";
    } else {
        echo "Doğrulama başarısız.";
    }
}
?>
<form method="POST">
    <img src="captcha.php" /> <br />
    <input type="text" name="guvenlik" /> <br />
    <input type="submit" />
</form>

Basit captcha uygulaması ile basit bot yazılımları engellenebilir. Daha farklı yazı tipi, renk, güvenlik kodu uzunluğu kullanarak captcha zorlaştırılabilir.

Ancak bunlar yetersiz kalırsa çeşitli captcha servislerinin kullanılması faydalı olacaktır.

PHP Derslerine buradan ulaşabilirsiniz…

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!