yakamara / ycom

Community AddOn für REDAXO
MIT License
58 stars 37 forks source link

Ycom Auth Rule Interval #487

Open nsd0hmasri opened 1 month ago

nsd0hmasri commented 1 month ago

Ich habe "15 Minuten nach 5 Versuchen gesperrt" eingestellt. Das funktioniert nach mehreren Versuchen aber nur, wenn die Login tries genau 5 oder 10 oder 15 etc. sind. Bei 6, 7 ist der Login auch vor den 15 Minuten wieder erfolgreich.

Ich denke der Code in ycom_auth_rules.php ist dafür zuständig:

case 'interval':
    if (0 == $loginTries || 0 != $loginTries % $rule['tries']) {
            return true;
        }
       break;

In meinem Fall ist diese (0 != $loginTries % $rule['tries']) Aussage nur false, wenn Login tries 5, 10, 15 etc. ist. Wenn also versucht wird bei 5 fehlgeschlagenen sich noch einmal einzuloggen wird in ycom_auth hier reingengangen (was ja auch korrekt ist)

if (!$auth_rules->check($loginUser, $authRuleConfig)) {
    $loginUser->increaseLoginTries()->save();
        throw new rex_exception('Login failed - Auth Rules');
}

Allerdings werden die tries dann um 1 erhöht und beim nächsten Versuch wird die Regel umgangen, da "0 != 6 % 5" true ist und es direkt zurück von ycom_auth_rules zu ycom_auth geht ohne die Zeit zu prüfen.

Wäre es da nicht generell besser einfach zu prüfen ob $loginTries < $rule['tries'] íst?

case 'interval':
    if (0 == $loginTries || $loginTries < $rule['tries']) {
            return true;
        }
       break;

Oder habe ich etwas übersehen?