rica ederim
Kısaca anlatayım;
image.php dosyası çağırıldığı zaman session'a bir değer atanıyor(dikkat! sadece image.php dosyası çağırıldığı zaman).
Bu güvenlik kodunu aşmak için gerekli adımları sırası ile yazayım.
1. güvenlik kodu bulunan form normal bir şekilde doldurulur ve güvenlik kodu bir yere not edilir

(normal bir kullanıcı gibi verileri doldurabilirsiniz)
2. form submit edilir ve güvenlik kodu kontrolü yapılır. (Güvenlik kodunun doğruluğu tespit edildiğinde güvenlik kodunun mevcut değeri silinmiyor.)
3. php ile yapılan http isteklerinde (örnek: file_get_contents, curl), html yi işleyemeyeceğinden dolayı image.php'ye istek yollamaz (Bu durumda önceki güvenlik kodunun session değeri silinmediğinden dolayı, güvenlik kodu yine aynısı kalır

) . Form verilerini ve not ettiğimiz güvenlik kodunu girip formu yolladığımızda güvenlik kodumuz yine doğru olacaktır çünkü hiç değişmedi zaten
Not: bu işlemi başka yöntemlerlede yapabilirsiniz. Mesela; ilk iki adımı aynı şekilde yapıp, üçüncü adımı browser ilede yapabilirsiniz. Bunu yapabilmek için; üçüncü adıma geldiğinizde image.php nin request edilmesine izin vermezsiniz ve bu sayede session değeri değişmez.
Saat sabahın körü, umarım düzgün yazmışımdır
şimdi anladım hocam
session değeri dediğiniz gibi image.php çağırıldığından değişiyor.
bi kere çağırdım diyelim captcha kodu =12345678
<form action="image2.php" method="post">
<input type="text" name="guvenlik" id="guvenlik" value="12345678" /><input type="submit" value="Gonder" />
</form>
ben bu kodu kullanarak chaptca yı aşmış olurum.
Sabahın köründe üşenmeden beni aydınlattığınız için çok teşekkürler
sanırım böyle yaparsak açığı kapatmış oluruz;
<script type="text/javascript">
<!--
function yenile()
{
var bir = new Date();
var iki = bir.getTime();
document.getElementById('captcha').src = 'image.php?x='+ iki;
}
-->
</script>
<?php
# Session oturumunu baslatiyoruz.
session_start();
# Eger sayfaya post yapilmissa guvenlik kodunu kontrol edelim.
if($_POST)
{
# POST ile kullanicinin girdigi guvenlik kodunu alalim.
$gonderilen = $_POST['guvenlik'];
# Eger bossa uyari verelim. Bos degilse kontrol edelim.
if(empty($gonderilen))
{
echo 'Guvenlik kodunu bos birakamazsiniz!';
}
else
{
if($_SESSION['guvenlik']['deger']==$gonderilen)
{
# Guvenlik kodu dogru girildi. Burada mail gonderimi, kayit vb. islemlerinizi yapabilirsiniz.
echo 'Guvenlik kodu dogru. Tesekkurler.';
unset($_SESSION['guvenlik']['deger']);
}
else
{
echo 'Hatali Guvenlik Kodu';
}
}
}
?>
<form action="" method="post">
<img id="captcha" src="image.php" /><br><input type="text" name="guvenlik" id="guvenlik" /><input type="button" onClick="yenile();" value="Yeni Kod" /><br><input type="submit" value="Gonder" />
</form>