Oturum olmadan PHP Captcha

13 Cevap php

Tamam, burada bir konudur: projede ben çalışıyorum, biz herhangi bir işlevsellik için sunucu tarafında oturumları güvenemez.

Sorun robotik gönderimleri engelleyen ortak Captcha çözümleri karşı captcha'yı maç dize saklamak için oturum gerektirir olmasıdır.

Soru - oturumları kullanarak olmadan sorunu çözmek için herhangi bir yolu var mı? Ne aklıma geliyor - bu sunucu daha sonra birlikte bu iki değer maç böylece, CAPTCHA girdi alanıyla birlikte, bazı karma içeren, gizli form alanını hizmet vermektedir. Ama kolayca captcha'yı kırmak için kullanılan olamazdı ki nasıl biz, bu yöntemi güvenli yapabilirsiniz.

13 Cevap

Use the honeypot technique : CSS (ekran tarafından gizli bir alana 'e' olarak açgözlü bir isim, yer ile bir metin alanı: none; görünürlüğü: ;) gizli.

Eğer formu sterilize varsa o alan boş ise, sadece kontrol etmek, bir spam, başka, (cant alanını görmek ve böylece cant doldurmak ki) bir insan tarafından gönderebilirsiniz ediliyor.

Bu formu göndermeden önce predefinited değerleri ile sayfadaki tüm alanları doldurmak için neden genellikle spam kullanımı ... ve captcha'yı okumak için kullanıcıyı rahatsız etmez.

Else, gibi bir şey $ kelime "kelimesinin ilk $ x harfini yazın", human reading güveniyor "alanına:"

Sonra, sadece bir sonraki sayfaya $ x ve $ kelime göndermek zorunda ve kontrol (ve tabii ki, alanlar daha accurated için isim rastgele olabilir)

Ben bir plugin for phpBB forum genellikle spam botlara karşı <select> alanlarda (değeriyle) avaiable ilk seçeneği seçer, gerçeğine güveniyor unutmayın; Sadece ilk seçenek olarak koymak <option value="kickmeplease">Yes, im a bot.</option>

Hayal: botlar asla bir faktör oynuyor istek dışı postalardan karşı korumak için birçok yol vardır,

Bir veritabanında kaptan kodları bir sürü depolama deneyebilirsiniz. Alternatif olarak, burada alternatif CAPTCHA yöntemleri üzerinde güzel bir tartışma gidecekseniz: http://stackoverflow.com/questions/8472/practical-non-image-based-captcha-approaches

bazı oldukça ilginç teknikler, gerçekten okudum.

, Base64, image / jpeg: oturumu veya veritabanı için ihtiyaç onu içeren html sayfası ile görüntü için GET koordine etmek ihtiyacı geliyor, yani nasıl bir CAPTCHA görüntüyü gömmek için aynı kodu kullanabilirsiniz: [img src = 'veri ... '], sonra tek bir GET olarak müşteriye görüntüyle birlikte rastgele tuz ve karma gönderme, metnini karma rastgele bir tuz kullanmak?

Postback Eğer tuza kullanıcı metin ekleyin sonra sağlamalarının karşılaştırın. Sadece bu olurdu ne kadar güvenli merak ...

CAPTCHA jeneratör bir görüntüyü döndürmek ve cevap (tuzlu / özel vurgu) için tuzlu bir karma veya özel karma kullanın. Bir çerez içine hash jeneratör itme var. Sunucu daha sonra çerez değere göre doğrulayabilir. Bu JavaScript ihtiyaç olmaz, ama çerezler devre dışı ise, başka bir tekniği son çare olurdu.

POST kullanıcı cevap ile birlikte CAPTCHA'nın bir UUID otomatik doldurmak. Kolay peasy.

Gizli giriş alanını sadece rastgele bir dizi yapmak. Captcha bilgilerle birlikte veritabanında bu rasgele veri depolamak, bu yüzden onunla doğru captcha'yı bakabilirsiniz.

Ayrıca üretilen her CAPTCHA yaşamak için bir kısa-ish saatini ayarlamak gerekir. Son olarak, depolamak ve izlemek veritabanındaki her CAPTCHA üzerindeki denemelerinin sayısını ve üzerinde sabit bir sınır empoze (3 tahminler ve başarısız kalıcı) olduğunu.

Kalıcı devlet sunucu tarafı olmadan, ben bir CAPTCHA çalışma görmüyorum.

Ne önerilen bir saldırgan kolayca her zaman eşleşen CAPTCHA metin ile kendi 'gizli alan' POST olabilir çünkü güvenli değildir.

Neden sürekli bir devlete sahip başka bir web sunucusu CAPTCHA yapmak değil mi?

Eğer bir CAPTCHA çağrısına yanıt onları bir istemci sertifikası verebilir? Bu tarayıcıda bu sertifikayı seçmek kez Sonra istemci her çağrı ile gönderilen ve oturumları olmadan ve daha fazla CAPTCHA aramalar olmadan kimlik doğrulama için kullanılabilir.

İşte bu benim almak (sry bu karmaşık görünüyor eğer) bulunuyor:

  1. sayfa istek üzerine:

    • Eğer 'abcdef' rastgele bir dize kodu oluşturmak;
    • you encrypt the code using some predefined password: $crypt = encrypt($captcha_code, 'password')
  2. şeklinde:

    • bir görüntü bağlantı tarayıcısında captcha.php? $ crypt 'gönderilir
    • Bir gizli girdi $ crypt değeri ile ayarlanır
  3. captcha.php sayfa şifreli metni çözer ve görüntü oluşturur.

  4. kullanıcı kodu 'abcdaa' ile bir form gönderir (ve gizli girdi $ crypt)

  5. Sunucu doğrular eğer encrypt ('abcdaa') == $ crypt

edit: the encrypt function needs to be reversible (decrypt), since the captcha image generator will need the original code.

Bu nasıl çözüm hakkında? Ben google bu "Oturumsuz PHP Captcha" yazı bulundu ve benim projelerinden biri üzerinde kullanılabilir, bu, hiçbir oturum basit ve ücretsiz. Herhangi bir güvenlik RC4 ilgiyi?

http://www.mythos-rini.com/blog/archives/732

Benim kendi fikrim, bunun iyi olduğunu bilmiyorum:

1) kullanıcı oturum açtıysa, sadece onun oturum bazı karma işlevi kullanmak ve onunla CAPTCHA oluşturmak,

2) Bu kayıt formu, vb ise sadece kullanıcı türünü bitirdiği zaman, örneğin giriş için (form alanında bazı değer karma) ve girişten karma ile ajax gösteri kaptan tarafından.

Bunun anlaşılabilir olduğunu umuyoruz. :)

EDIT: Without AJAX: 2 steps registration:

1 anda, biz ?login=new_login doğrudan, vb giriş yaptıktan sonra teslim toplamak

2 at, biz GET["login"] ve CAPTCHA resminde ondan karma ile giriş gizlediniz - sonra hepimiz cevap kontrol etmek zorunda gönderin.

Biraz geç oldu ama, bu çözümü deneyin CAPTCHA image protection without cookies and sessions

Sadece = matematik CAPTCHA ;) 2 +90 yapmak? denklemi bir görüntü ve voila göstermek olmalıdır ;)