Eindringlingserkennung / Intrusion Detection

Brute-Force-Schutz für ein Login-Formular

Login-Formulare bedürfen eines besonderen Schutzes, da der  Anwender in der Regel nach erfolgreichem Login authorisiert wird, auf Daten zuzugreifen. Missbrauch von Logins sollten daher mit einem Banning abgestraft werden. Verwenden Sie dazu das Plugin security\intrusion_detection. 

Controller
use brandbox\security\intrusion_detection; ... /** * @param string $username * @param string $password */ public function login($username, $password) { $engineIntrusionDetection = $this ->getAppFactory(intrusion_detection\engine::class) ; $formIdentificationKey = 'my-login'; // Anwender ist bereits gesperrt if($engineIntrusionDetection->isBanned($formIdentificationKey, $throwBanMessage = true)): throw new lib\exception\yourException(); endif; // Brute Force Attacke verhindern if(true !== $engineIntrusionDetection->isValidRequest()): $engineIntrusionDetection->banIP($formIdentificationKey, $setIsBanned = true, $lifetime = 30); throw new lib\exception\yourException(); endif; }

Nach nochmaligem Aufruf des Logins soll dem Anwender das Login-Fenster nicht mehr angezeigt werden. 
In diesem Beispiel wurde der Anwender für 30 Sekunden gesperrt. Das Login-Fenster blenden Sie wie folgt aus:

View
{{#isNotBanned "my-login"}} <form>...</form> {{/isNotBanned}}

Banning-Regeln 

  • Ein Anwender darf sich mit der gleichen IP 4x in 10 Minuten anmelden

  • Beliebig viele  Anwender der selben IP dürfen sich 100x in 10 Minuten anmelden

  • Ein Anwender darf sich mit der gleichen IP 8x in 60 Minuten anmelden

  • Beliebig viele Anwender einer IP dürfen sich 600x in 60 Minuten anmelden

Brute-Force-Schutz mit Captcha

Es ist möglich, Formulare mit einem Captcha anzureichern, falls der Anwender geblockt wurde. In diesem Fall werden Anwender nicht gebanned.

Controller
use brandbox\security\intrusion_detection; ... /** * @param string $username * @param string $password */ public function login($username, $password) { $engineIntrusionDetection = $this ->getAppFactory(intrusion_detection\engine::class) ; $formIdentificationKey = 'my-login'; // Anwender ist bereits gesperrt if($engineIntrusionDetection->isBlocked($formIdentificationKey)): throw new lib\exception\yourException(); endif; // Anwender hat ein Captcha eingegben. // Bei Erfolg wird das banning aufgehoben und der Zyklus startet von vorn. if(!empty($captcha)): if(true === $engineIntrusionDetection->isValidCaptcha($captcha)): $engineIntrusionDetection->removeBanIP($formIdentificationKey); endif; endif; // Brute Force Attacke verhindern if(true !== $engineIntrusionDetection->isValidRequest()): $engineIntrusionDetection->banIP( $formIdentificationKey, $setIsBanned = false, $lifetime = 60 * 60 ); throw new lib\exception\yourException(); endif; }



View