• 04-02-2022, 11:31:14
    #1
    Öncelikle re-captcha kullanıyor ve php ile captcha oluşturma işlemleri yapmıyorsanız konuyu pas geçebilirsiniz veya yanlış bildiğiniz konu varsa öğrenebilirsiniz konuyu re-captcha kullanmadığımızı varsayarak anlatıyorum.

    Sıkça yapılan hata - 1

    Kaynakta gösterilen captchalar oluşturmayın. Kaynak üzerinden botlar okuma yapabilir ve aldığı veriye göre doğrulamayı geçebilir.

    Örnek Hatalı Kullanım : 2+2 = ?

    Sıkça yapılan hata - 2

    HTML form içerisinde, php tabanlı resim üzerinde text oluşturmak ve bunu sadece resim olarak ekrana bastırmak;

    Buradaki işlemde kullanıcı siteye girdiğinde sadece resimi görmesi durumunda captcha oluşturulur.

    Buraya kadar bir problem yok ancak, resimi bir defa oluşturduktan sonra kaydedeceği cookie bilgisi ile tekrardan doğrulamayı geçebilir.

    Yani bot aracılığı ile sadece backend tarafına işlem yapılacağından captcha'nın yenilenmesi gerçekleşmez çünkü resim çağırılmayacaktır.

    ÇÖZÜM:

    Aşağıdaki adımları izleyerek daha güvenli bir captcha sistemi yapabilirsiniz.

    Olması gereken kodlama adımları class ve method adları örnek olarak verilmiştir fonksiyonları kendiniz oluşturabilirsiniz sadece olması gereken adımları belirttim.

    FORM SAYFASI

    <?php
    if($_POST)
    {
    	if($_POST['captcha']=='')
    	{
    		echo 'Güvenlik Kodu Hatalı!';
    	}
    	else
    	{
    		if($_POST['captcha']==$_SESSION['captcha'])
    		{
    			echo 'Merhaba '.$_POST['ornek'];
    		}
    		else
    		{
    			echo 'Güvenlik Kodu Hatalı!';
    		}
    	}
    }
    $captcha = new captcha();
    $captcha->create_captcha(); // kullanıcıya captcha atandı
    ?>
    
    <form action="" method="post">
    	<input type="text" name="ornek" placeholder="İsminiz">
    	<br/>
    	<img src="captcha.php">
    	<br/>
    	<input type="text" name="captcha" placeholder="Ne görüyorsun yaz bana ?">
    	<br/>
    	<input type="submit" value="Gönder">
    </form>
    CAPTCHA.PHP

    <?php
    	// session verisini alarak bununla resmi oluşturun.
    ?>
  • 04-02-2022, 11:37:01
    #2
    Yararlı bir paylaşım elinize sağlık.
  • 04-02-2022, 11:40:31
    #3
    Güzel makale elinize sağlık. Bir öneride de ben bulunayım. JavaScript ile Canvas kullanarak captcha yapmak da çok verimlidir. Spamlardan 100% koruyor, özel yapım bot ile geçmeyi denemedim hiç fakat gerek yorum spam gerek kullanıcı spamı olsun tamamen kesiyor. Canvas kullanmanın artısı olarak resim dosyası yaratmıyor, cache yok, kaynak kodunda bir bilgi yok tamamen gizli.
  • 04-02-2022, 11:48:29
    #4
    MuhammetDemirel adlı üyeden alıntı: mesajı görüntüle
    Güzel makale elinize sağlık. Bir öneride de ben bulunayım. JavaScript ile Canvas kullanarak captcha yapmak da çok verimlidir. Spamlardan 100% koruyor, özel yapım bot ile geçmeyi denemedim hiç fakat gerek yorum spam gerek kullanıcı spamı olsun tamamen kesiyor. Canvas kullanmanın artısı olarak resim dosyası yaratmıyor, cache yok, kaynak kodunda bir bilgi yok tamamen gizli.
    Javascript tabanlı captcha' yı neye göre kullanacağınıza göre bu durum değişebilir. Söylediğiniz işlem sadece tarayıcı tabanlı yapılan işlemler için ( backend tarafına işlem sağlanmayan ) geçerli olabilir. Yani javascriptle doğrulama yapıp php ye post yaparsanız güvenlik açığı ortaya çıkacaktır

    Söylediğiniz çok fazla güvenlik gerektirmeyen oy kullanma v.b konular için belki kullanılabilir teşekkürler.
  • 04-02-2022, 12:09:10
    #5
    Alıntı
    Buradaki işlemde kullanıcı siteye girdiğinde
    Alıntı
    sadece resimi görmesi durumunda captcha oluşturulur.

    Buraya kadar bir problem yok ancak, resimi bir defa oluşturduktan sonra kaydedeceği cookie bilgisi ile tekrardan doğrulamayı geçebilir.

    Yani bot aracılığı ile sadece backend tarafına işlem yapılacağından captcha'nın yenilenmesi gerçekleşmez çünkü resim çağırılmayacaktır.


    Aslında ufak dokunuşlar ile bu kullanımı güvenli hale getirilebilir.

    1.Resim gösterildiğinde güvenlik kodunu Session olarak tutmak
    2. Resim gösterilmese bile Backend tarafında session kontrolü yaptığınız için işlem yapamayacak
    3. Başarılı yada başarısız her işlemde session silip tekrar güvenlik kodunu oluşturmak.
  • 04-02-2022, 13:37:41
    #6
    Riga adlı üyeden alıntı: mesajı görüntüle
    Javascript tabanlı captcha' yı neye göre kullanacağınıza göre bu durum değişebilir. Söylediğiniz işlem sadece tarayıcı tabanlı yapılan işlemler için ( backend tarafına işlem sağlanmayan ) geçerli olabilir. Yani javascriptle doğrulama yapıp php ye post yaparsanız güvenlik açığı ortaya çıkacaktır

    Söylediğiniz çok fazla güvenlik gerektirmeyen oy kullanma v.b konular için belki kullanılabilir teşekkürler.
    Captcha kodu back end tarafında oluşturulup render edilirken js ile canvasa yazılarak kullanılabilir daha sonra post edilen veri back end kısmında karşılaştırılır. Bunda sorun yok ister front end ister back end tarafında kullanılır yeterki kullanmak istensin.

    Canvas captcha sistemleri image olarak sunulan capcha sistemlerine göre çok daha güvenlidir ister front end kontrollü olsun ister back end. Çünkü canvas sistemler html tarafında kod göstermez, image gibi indirilemez ya da sürüklenemez, grafiksel bir işlemdir.

    Güvenlik açığı oluşturma konusunda ise zaten koda müdahale etmeden captcha geçmek imkansız sebebi şu. Canvas kodu class içerisinde oluşturulup kontrol sağlanırsa eğer değişkende tanımlı olan captcha değeri dışarıdan erişilip değiştirilemez bu sayede forma girilen değer dışında bu değişkendeki değer ile karşılaştırma yapmak imkansız. Amacımız zaten botları uzak tutmak, spam engellemek. Bu da gayet güvenli bir şekilde sağlanıyor.

    Yıllardır captchayı bu şekilde kullanırım hatta bir çok npm modülü dahi bu şekilde yazılmıştır ve hiçbirinde sorun yaşamadım.