PHP: Anti-Flood/Spam sistemi

5 Cevap php

I'm actually working on a PHP project that will feature a user system (Login,Register,Send lost password to email,..) and I think that this may be very vulnerable to Brute-Force attacks and/or Spam (Send a password to someone's email like 1000 times, etc. use your fantasy) .

  • Bugünün websunucu (Apache, IIS) çeşit var mı dahili Brute-Force karşı savunma?
  • Ben örneğin ne, bir Anti-Spam/Flood sistemi uygulamak için en iyi yol olacaktır: Bir sayfa, en fazla iki kez bir dakika çağrılacak ancak başka bir sayfa 100 kere bir dakika ya da öylesine kadar denebilecek mümkün olmayacaktır istiyorum .

    • Ben kesinlikle IP adresleri, geçen yerde bir sayfa ve ziyaretlerin sayısını ziyaret zamanı saklamak olurdu - ama yeterince (MySQL) bir text-file/database içinde saklamak verimli olacaktır

    • Ben kayıp şifreleri kurtarmak / kayıt gibi şeyler için captcha'lar kullanmalı mıyım?

    • "Metin" captcha'lar yaşayabilir misiniz? (Gibi bir şey "5 artı 9 eksi 2 nedir?")

    • Sayfa aslında bütün bunları uygulamak zorunda, birçok kullanıcı (100-200) tarafından kullanılan olmayacak?

5 Cevap

Regarding CAPTCHAs: Ben gerçekten ihtiyacınız olmadıkça CAPTCHA'ları kullanarak karşı öneriyoruz. Neden?

  1. çirkin.
  2. bu kullanıcılar için sinir bozucu. Onları sitenizde kullanmak için çemberler üzerinden atlamak yapmamalıyız.

Çok basit, çok etkili olabilir ve (almost all) kullanıcılara tamamen şeffaf olan bazı alternatifler vardır.

  1. Honeypot fields: "web sitesi" gibi ortak bir adla formlarına bir alan eklemek. Bunun yanında, "bu kutuya yazmayın" etkisi bir şey söyleyerek bir etiket ekleyin. Javascript giriş ve etiket gizlemek kullanma. Eğer bir form gönderme aldığınızda, alanında herhangi bir şey varsa, girdi olarak reddedecektir.

    JS ile kullanıcılar göremez ve iyi olacak. JS olmayan kullanıcılar sadece basit talimatları takip etmek zorunda kalacak. Spambots bunun için sonbahar ve kendilerini ortaya çıkaracaktır.

  2. Automatic faux-CAPTCHA: Bu işlem, yukarıda benzer. Diyerek bir etiket ile bir giriş alanını ekleyin "Write 'Alex'" (örneğin). Javascript kullanarak (ve çoğu otomatik spam botlara JS aday olmayacağını bilerek), alanını gizlemek ve 'Alex' ile doldurmak. Gönderilen form orada sihirli kelime yoksa, o zaman bunu görmezden.

    JS ile kullanıcılar göremez ve iyi olacak. JS olmayan kullanıcılar sadece basit talimatları takip etmek zorunda kalacak. Spambots ne olacağını bilmiyorlar ve onların girişini gözardı edebilirsiniz.

Bu otomatik spam botlara% 99.9 sizi korumak olacaktır. Bunu yapmayacağım ne, hatta ufak bir hedef saldırıya karşı sizi korumak olduğunu. Birisi bal küpü önlemek için bot özelleştirmek veya her zaman doğru değer doldurabilir.


Regarding Brute Force blocking: Bir sunucu tarafı çözümü açıkça bunu yapmak için tek geçerli yoldur. Benim şimdiki projelerinden biri için, sana açıklamak ne çok benzer bir kaba kuvvet koruma sistemi uygulanmaktadır. Bu CakePHP için bu Brute Force Protection plugin dayanmaktadır.

Algoritma oldukça basit, ama biraz başlangıçta kafa karıştırıcı.

  1. Kullanıcı bazı eylem istekleri (parola sıfırlama, örneğin)
  2. Çalıştırın: DELETE * FROM brute_force WHERE expires < NOW()
  3. Çalıştırın:

    SELECT COUNT(*) FROM brute_force 
    WHERE action = 'passwordReset'
    AND ip = <their ip address>
    
  4. Sayısı büyükse X, sonra bir süre beklemelerini söyle.
  5. Aksi halde, çalıştırın:

    INSERT INTO brute_force (ip, action, expires)
    VALUES (<their ip address>, 'passwordReset', NOW() + Y minutes)
    
  6. Reset şifre fonksiyonu ile devam edin.

Bu, kullanıcıların sadece Y dakika içinde bir parola X kez sıfırlamayı deneyin sağlayacaktır. Uygun gördüğünüz gibi bu değerleri Tweak. 5 dakika içinde belki 3 sıfırlar? Ayrıca, her bir eylem için farklı değerlere sahip olabilir: bazı şeyler (örneğin: PDF oluşturmak) için, 10 dakika içinde 10 kısıtlamak isteyebilirsiniz.

Lütfen PHP all mantığını uygulamak için deneyin etmeyin - bunu uygulamak edebilirsiniz yığınında düşük, daha verimli, daha ele alınabilir.

(BSD / Linux üzerinde iptables dahil) çoğu güvenlik duvarı bağlantı azaltmayı var. Ayrıca, DDOS / kaba kuvvet saldırısı önlenmesi için mod_security'nin bakabilirsiniz.

Sen should saldırıların bu tür app saldırganın erişim vermeyecektir fikri etrafında uygulama tasarımı - günün sonunda bir DOS saldırısını önlemek hiçbir yolu yoktur, sınırlamak rağmen onun etkinliği.

Değer bir çok saldırganın tutarlı bir IP adresi dayanarak Orada değil - etrafında almanın birçok yolu var.

örneğin her kullanıcı tarafından oturumlar arasında parola sıfırlama isteklerinin sayısını takip. Kullanıcının bilinmeyen bir e-posta adresi gönderdiğinde eğer parola sıfırlama şeklinde, exactly aynı şekilde (müşteriye) yanıt verir. Geçersiz e-posta adreslerini yapın.

HTH

C.

Gãžler söylüyorum ne yapıyor yanı sıra, aynı zamanda genel olarak giriş girişimlerini sayma bir yolunu bulmalıdır. Bu tüm giriş girişimlerinin toplam uyku komutunu kullanarak başlatmak veya sadece sunucuları yüksek yük var diyelim, ya sonra X daha büyüktür.

IP adreslerini depolamak loggin ve takibi için iyi bir uygulama ama ben sadece captcha spam, kaba kuvvet saldırıları ve sel durdurmak olacağını düşünüyorum.

Güvenlik Sorgulama gerçekten iyi bir çözümdür.

Emin, Hedef kitleniz büyük olmayabilir ama kamu malı ise o zaman savunmasız

Metin Captcha en kolay kırık bu gün inan bana

Bir Anti-Spam/Flood sistemi için IP addressses log (MySQL tercihen) ve bir zaman sınırı açma yeniden deneme ekleyebilirsiniz