Kategoriler
Php fonksiyonlari Webmaster yardım

Php güvenlik kodu uygulaması (captcha)

Merhaba arkadaslar, bu yazimda size cok guzel bir Php güvenlik kodu uygulaması (captcha) betigi paylasacagim. Baslamadan once demo gormek isteyenler buraya bakabilirler.

Peki nedir bu güvenlik kodu (captcha)?
Gelistirilmesinin amaci bilgisayar ile insanlari birbirinden ayirt ederek sitelere ve sunuculara gelecek olan anlik saldiri girisimlerini engellemek diyebiliriz. Daha net ifade etmek gerekirse genelde sitelere uye girisi, uye olma, yorum yapma gibi bolumlerde kullanilan, bilgisayar programlarinin, botlarin birden fazla girisimde bulunarak, siteyi hedef alan saldirilara yada icerigin calinmasina neden olan acigin kapatilmasina yaramaktadir.

Bir cok sitede gorursunuz genelde bunlari, bazen resim uzerine karakter bulunur, bazen de bir soru seklinde cikar karsimiza. Ancak en cok kullanilan ornegi resim uzerine restgele karakterler bastirarak giris yapan kisinin bu harfleri dogrulamasini istemektir..

Bu konuda paylasacagim betik istenirse gelistirilebilecek bir uygulama. Nasil calisir sorusuna cevap vermeden once isterseniz kodlarimizi ve dosyalarimizi paylasalim..

2 Dosyamiz var bunlardan birisi form.php yani dogrulamanin yapilacagi dosyamiz, digeride guvenlik kodunu olusturacagimiz ve session a atayacagimiz dosyamiz.

oncelikle form.php dosyasini paylasalim:

< ?php
session_start();

if( isset($_POST['submit'])) {
if( $_SESSION['security_code'] == $_POST['security_code'] && !empty($_SESSION['security_code'] ) ) {
// Insert you code for processing the form here, e.g emailing the submission, entering it into a database.
echo 'Thank you. Your message said "'.$_POST['message'].'"';
unset($_SESSION['security_code']);
} else {
// Insert your code for showing an error message here
echo 'Sorry, you have provided an invalid security code';
}
} else {
?>






< ?php } ?>

Simdide guvenlik resmini olusturup, session’a atayip, ekrana basacagimiz CaptchaSecurityImages.php dosyasi:

< ?php
session_start();

/*
* File: CaptchaSecurityImages.php
* Author: Simon Jarvis
* Copyright: 2006 Simon Jarvis
* Date: 03/08/06
* Updated: 07/02/07
* Requirements: PHP 4/5 with GD and FreeType libraries
* Link: http://www.white-hat-web-design.co.uk/articles/php-captcha.php
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
* http://www.gnu.org/licenses/gpl.html
*
*/

class CaptchaSecurityImages {

var $font = 'monofont.ttf';

function generateCode($characters) {
/* list all possible characters, similar looking characters and vowels have been removed */
$possible = '23456789bcdfghjkmnpqrstvwxyz';
$code = '';
$i = 0;
while ($i < $characters) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
return $code;
}

function CaptchaSecurityImages($width='120',$height='40',$characters='6') {
$code = $this->generateCode($characters);
/* font size will be 75% of the image height */
$font_size = $height * 0.75;
$image = @imagecreate($width, $height) or die('Cannot initialize new GD image stream');
/* set the colours */
$background_color = imagecolorallocate($image, 255, 255, 255);
$text_color = imagecolorallocate($image, 20, 40, 100);
$noise_color = imagecolorallocate($image, 100, 120, 180);
/* generate random dots in background */
for( $i=0; $i< ($width*$height)/3; $i++ ) {
imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
}
/* generate random lines in background */
for( $i=0; $i<($width*$height)/150; $i++ ) {
imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
}
/* create textbox and add text */
$textbox = imagettfbbox($font_size, 0, $this->font, $code) or die('Error in imagettfbbox function');
$x = ($width - $textbox[4])/2;
$y = ($height - $textbox[5])/2;
imagettftext($image, $font_size, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function');
/* output captcha image to browser */
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
$_SESSION['security_code'] = $code;
}

}

$width = isset($_GET['width']) ? $_GET['width'] : '120';
$height = isset($_GET['height']) ? $_GET['height'] : '40';
$characters = isset($_GET['characters']) && $_GET['characters'] > 1 ? $_GET['characters'] : '6';

$captcha = new CaptchaSecurityImages($width,$height,$characters);

?>

Bu kadar birde karakterler icin bir font dosyamiz var onuda buradan indirerek dosyalar ile ayni yere yukleyin. Yazi fontunu siz istediginiz sekilde duzenleyebilirsiniz daha sonra, yani farkli fontlar kullanabilirsiniz..

Calisma mantigi nedir ?
Oncelikle guvenlik kodu uygulamasi session ile calisir, session’a atanan rastgele kodlari form ile dogrulamanizi isteriz ve eger session’dakiler ile form’dakiler ayni ise guvenlik uygulamasini gecmenize izin veririz. Aksi durumda eslesme mumkun olmaz ise tekrar guvenlik kodu uygulamasina geri donersiniz. form.php dosyasinda guvenlik kodu olusturup ekrana resim olarak bastigimiz kisim burasi:

Bu bir resim degil ancak php dosyasinda header bilgilerini resim gibi gosterip ekrana o sekilde gosterdik. Burada goreceginiz gibi guvenlik kodu resminin genisligini ve yuksekligini, ayrica kac karakter olmasini istediginizide ayarlayabiliyorsunuz. Boylece kendinize ozgu daha zor guvenlik kodu uygulamasi olusturabilirsiniz..

Bu uygulamada session kullanildi, ne oldugunu merak edenler olabilir, kisaca yazayim: Session bir oturum uygulamasidir, her kullanici icin yada burdaki uygulamada oldugu gibi her istek icin bir session yani oturum ismi olusturur. Burada rastgele olusturdugumuz kodu session’a atayip formdan gelen veri ile eslestirdik. Boylece guvenlik kodu uygulamasida calisir hale geldi ve kullanima hazir..

Yukarida anlattigimiz uygulamanin butun dosyalarini calisir halde indirmek icin buraya tiklayin.

Uygulamadaki class dosyasini hazirlayan Simon Jarvis isimli arkadasimiza cok tesekkur ederim oncelikle. Web sitesi ise burasidir.

bir yazinin daha sonuna geldim sanirim, bol gunesli gunler..

Yazar selçuk KILIÇ

Bende 1 yumurta var, sende 1 yumurta var. Ben sana 1 yumurta versem, sen bana bir yumurta versen, bende 1 yumurta sende 1 yumurta olur.Bende 1 bilgi var, sende 1 bilgi var. Ben sana 1 bilgi versem, sen bana 1 bilgi versen, bende 2 bilgi, sende de 2 bilgi olur - Konfüçyüs - Yazilarimi artik kuaza da yayinliyorum (zamanim oldukca) :)

“Php güvenlik kodu uygulaması (captcha)” için 8 yanıt

Çok güzel bir paylaşım. Hiç zorluk yaşamadan sistemime ekledim. Ramazan ramazan büyük sevap kazandınız.Allah razı olsun…

merhaba, ben bu kodları localhostta denemek istedim fakat resim görünmüyor, bu resimleri göstermek için ne yapabilirim?

Kullandığım hosting şirketinde GD yüklü fakat Freetype’a izin vermiyorlar.
Freetype olmadan captcha kullanmanın yöntemi var mıdır? Ya da wordpress plugin’i.

Teşekkürler

reCAPTCHA uygulamasini deneyebilirsiniz, herhangi bir php v.s gerek yok. WordPress dede bir cok eklentisi mevcut aratarak kullanabilirsiniz. Konudaki uygulamadan cok daha kaliteli bence :)

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.