[Döküman] - PHP İle Güvenlik Kodu Yapımı
-
Güvenlik kodu uygulamaları anti-spam amaçlı yazılırlar.Biz bu dökümanda php ile güvenlik kodu uygulaması yapıcaz.Kullanıcağımız başlıca fonksiyonlar : session,rand(),isset,unset.
Toplam 2 adet php dosyamız olucak bunlar c.php ve c1.php
### c.php içeriği :
<? session_start(); # session başladı. if(!isset($_SESSION['guvenlik'])) { $_SESSION['guvenlik'] = rand(1,10); # guvenlik değerine 1 ile 10 arası bir değer verdik,her yenilenmede kaybolacağından session yardımıyla bunu önledik. $g1 = $_SESSION['guvenlik']; } if(!isset($_SESSION['guvenlikk'])) { $_SESSION['guvenlikk'] = rand(1,10); # guvenlikk (2. rastgele değer) $g2 = $_SESSION['guvenlikk']; } $kacyapar = $g1+$g2; # değerlerimizi topladık (+ = toplama, - = çıkartma, * = çarpma , / = bölme) $x = "+"; echo "<form name=\"siradanform\" method=\"post\" action=\"c1.php\"> <p> <input type=\"text\" name=\"sahilGuvenlik\" value=\"$g1$x$g2 = ?\" /> </p> <p> <input type=\"submit\" name=\"ok\" value=\"OK\" /> </p> </form>"; ?>
### c1.php içeriği :<? require_once 'c.php'; # c.php i monte ettik. $kirk = $_POST['sahilGuvenlik']; # verileride monteleyelim. $g1 = $_SESSION['guvenlik']; $g2 = $_SESSION['guvenlikk']; $kacyapar = $g1+$g2; # burdada verileri toplattık if($kirk==$kacyapar) { # eğer doğru girerse tahribat.com anasayfaya atıcak header("Refresh: 0; url=http://www.tahribat.com"); } elseif(empty($kirk)) { # direkt c1.php çağrılırsa veya uyanık kullanıcı değeri boş bırakırsa hatayı yazdırıp tekrar c.php e atıcak echo "<script type=\"text/javascript\"> alert(\"Güvenlik Kodu Girilmedi \"); </script>"; header("Refresh: 1; url=c.php"); } else { # yanlış girerse js ile hatayı yazdırıp tekrar c.php e atıcak. echo "<script type=\"text/javascript\"> alert(\"Güvenlik Kodu Doğru Değil \"); </script>"; header("Refresh: 1; url=c.php"); } unset($_SESSION['guvenlik'],$_SESSION['guvenlikk']); # burdada session öldürüyoruz ?>
Yukarıdaki uygulama text kutucuğuna soruyu yazdırır,bu aslında bot ve spam a karşı tam çözüm değildir.Bot value değerini okuyup size spamları postalayabilir (:
Spam olayını tamamen kaldırmak için güvenlik sorusunu resim formatında ekrana bastırmanız gerekiyor (jpeg) onun ile ilgili dökümanı zorkaya isimli arkadaş yazmış ( http://www.tahribat.com/Dokuman-Php-Ile-Resim-Olusturma-310/ ) ordaki uygulamayı burdaki uygulamayla birleştirmek için dökümanda yer alan ImageString değerine "$g1$x$g2" vermeniz yeterlidir,böylece güvenlik sorusu .jpeg formatında ekrana yazdırılır ve spam girişimleri engellenmiş olur.(kafanız karışmasın diye ben jpeg formatında ekrana bastırmadım eğer isterseniz kolay bir şekilde monte edebilirsiniz yada pm atın ben sizin yerinize monte edim) -
eline sağlık. re-captcha entegrasyonu varken gerek varmıydı acaba bu algoritmaya ?
-
Elines ağlık code libraryme attım
-
(bkz: asp ile güvenlik kodu yapımı)
Bir üye girişinde genelde 2 form alanı vardır.Kullanıcı Adı & şifre buna bir de Güvenlik alanı ekliyoruz ve diğer sayfada güvenlik şifresini kontrol ediyoruz.Uygulama 2 asp dosyasından oluşmaktadır.Kodlar üzerinde küçük oynamalarla kendinize göre düzenleyebilirsiniz.
Form.asp
<%
‘Güvenlik parolasının uzunluğunu 1. satırdan
‘Parola içinde harf olup olmayacağını 2. satırdan
‘Parola içinde sayı olup olmayacağını 3. satırdan
‘Ayarlıyoruz bu arada 1 evet 2 hayır anlamına geliyor (2. & 3. satırlar için)ParolaUzunluk=5
strHarf=1
strSayi=1‘Burada karmaşık bir şifre üretecek fonksiyonumuz var
Function SifreUret(KarekterMiktari, RakamOlacakmi, strHarf)
Harfler=Array(“A” ,”B” ,”C” ,”D” ,”E” ,”F” ,”G” ,”H” ,”I” ,”J” ,”K” ,”L” ,”M” ,”N” ,”P” ,”Q” ,”R” ,”S” ,”T” ,”U” ,”V” ,”W” ,”X” ,”Y” ,”Z” )
Rakamlar=Array(“1″ ,”2″ ,”3″ ,”4″ ,”5″ ,”6″ ,”7″ ,”8″ ,”9″ )
If RakamOlacakmi = “1″ AND strHarf = “1″ Then
Kontrol = “3″
ElseIf RakamOlacakmi = “1″ Then
TempK = “2″
ElseIf strHarf = “1″ Then
TempK = “1″
End If
i = DatePart(“s” , Now)+2 : Do While i > j : j=DatePart(“s” , Now) : Loop
Randomize Timer
For I = 1 To Int(KarekterMiktari)
If Kontrol = “3″ Then TempK = Int((Rnd * 2) + 1)
If TempK = 1 Then
TempPass = TempPass & “” & Harfler(Int((Rnd * 25) + 0))
ElseIf TempK = 2 Then
TempPass = TempPass& “” & Rakamlar(Int((Rnd * 9) + 0))
End If
Next
SifreUret = TempPass
End Function
‘şifre üreten fonksiyonumuz bitiyor‘Üretilen şifreyi Ekrana Yazdıracağımız Fonksiyonumuz
Function ParolaYazdir(Veri)
For i = 1 To Len(Veri) : TBT = Mid(Veri,i,1)
Response.Write”" & TBT &”"
Next
End Function
‘Bu Fonksiyonumuzda Bitiyor‘Session nesnemize şifremizi atıyoruz & sonra yazdırıyoruz
Session(“Parola” ) = SifreUret(ParolaUzunluk,strSayi,strHarf)
ParolaYazdir Session(“Parola” )
%>
<form action=”kontrol.asp” method=”get”>
Lütfen yukarıdaki güvenlik kodunu aşağıdaki alana yazınız.<br>
<input type=”text” name=”frmParola” size=”20″><input type=”submit”>
</form>Gördüğünüz gibi form.asp sayfasının yapısı bu şekilde.Fonksiyonları anlamasanızda olur önemli olan ben bu sayfada işlemi normal yazı şeklinde yazdırdım.Siz belki resim şeklinde yazdırmak isteyebilirsiniz.Ya da sitenizin tasarımına uygun bir hale getirmek isteyebilirsiniz.İşte bu durumları “ParolaYazdir” Fonksiyonundan düzenliyoruz.Ve orda görmüş bulunduğunuz TBT kelimesi her bir parola karakterini temsil ediyor.Yani bunu resimle yapmak isterseniz oraya;
<img src=resim_”& TBT &”.gif>
gibi bir ifade kullanmanız gerekecek.Peki buradan gelen formu nasıl kontrol edeceğiz.
Kontrol.asp
<table width=”100%”>
<tr>
<td width=”50%”>Yazmanız Gereken Parola</td>
<td width=”50%”><%=Session(“Parola” )%></td>
</tr>
<tr>
<td width=”50%”>Yazdığınız Parola</td>
<td width=”50%”><%=request(“frmParola” )%></td>
</tr>
<tr>
<td width=”100%” colspan=”2″><b><%
If Request(“frmParola” )=Session(“Parola” ) Then
Response.Write”<font size=” “5″ ” color=” “#008000″ “>Denetimi Geçti</font>”
Else
Response.Write”<font size=” “5″ ” color=” “#FF0000″ “>Denetimi Geçemedi</font>”
End If
%></b>
</td>
</tr>
</table> -
teşekkürler
-
eline beynine sağlık hoca işe yarar
-
scratch
-
Rene'nin dökümanları da okumaya başladık, gidişat süper olacak.. ellerine sağlık hocam. tam da kullanabileceğim bir kod, şimdiden iş gördü bile :)
-
eXceptioN bunu yazdı:
-----------------------------Gördüğünüz gibi form.asp sayfasının yapısı bu şekilde.Fonksiyonları anlamasanızda olur önemli olan ben bu sayfada işlemi normal yazı şeklinde yazdırdım.Siz belki resim şeklinde yazdırmak isteyebilirsiniz.Ya da sitenizin tasarımına uygun bir hale getirmek isteyebilirsiniz.İşte bu durumları “ParolaYazdir” Fonksiyonundan düzenliyoruz.Ve orda görmüş bulunduğunuz TBT kelimesi her bir parola karakterini temsil ediyor.Yani bunu resimle yapmak isterseniz oraya;
<img src=resim_”& TBT &”.gif>
-----------------------------Resimlisi için böyle demişsin, sadece resim dosyasının adını değiştirmiyormu bu. Demek istediğim text olarak güvenlik kodunu verirse, programlarla rahatca okunabiliyor
-
DE5TROY3R bunu yazdı:
-----------------------------
Resimlisi için böyle demişsin, sadece resim dosyasının adını değiştirmiyormu bu. Demek istediğim text olarak güvenlik kodunu verirse, programlarla rahatca okunabiliyor
-----------------------------sadece örnek verdim orda kodlamaya dahil değil zaten isteyen kendine göre geliştirebilir hani, evet text olması kötü programlarla geçilebiliyor (:
-
biraz performans manyağı olduğum için bir kaç şey eklyim
echo ile " yerine ' kullanmayı tercih edin.Değişkenleride şu şekilde (tek tırnakla ) kullanabilirsiniz;
echo 'hebe', $degisken, 'que';
bu sayede html karakterlerini kaçış olmadan kullanabilirsiniz.NE gibi ?
echo '<a href="?/',$tik,'">Tıkla</a>';
gibi.Burda çift tırnak içinde değişken kullanırsak önce kodu derler sonra ekrana basar.FAkat tek tırnakla kullanıp virgül ile bağlarsak sadece ekrana basar.Fakat tek tırnak kullanıp, nokta koyarsanız yine derler.
Hea bir kaç mili saniye kazandırır.İhtiyaç varmı derseniz ayrı konu.FAkat şak şak açılan sayfalar için var sanırım :)
bknz (google webmasterları böyle diyor)
----------
rene: hocam seni php tarafında gördüm ya , vallahi sevindim.Darısı linux başınada.Dediğim gibi linux üstünde server+site bağını daha iyi yaklayıp güzel programlar yazacaınızı dşünüyorum.Daha verimli olacağınızı.E bizde bl bol faydalanabilirik :)