Drupal blockiert die IP, die für den Zugriff auf die Site verwendet wird, wenn ein Benutzer mehrmals versucht, sich anzumelden.
Wie kann ich diese Funktionalität deaktivieren?
Sie können den folgenden Code in die Datei settings.php einfügen.
$conf['user_failed_login_ip_limit'] = PHP_INT_MAX;
Auf diese Weise wird die IP nicht blockiert.
user_login_authenticate_validate () enthält den folgenden Code.
if (!empty($form_state['values']['name']) && !empty($password)) {
// Do not allow any login from the current user's IP if the limit has been
// reached. Default is 50 failed attempts allowed in one hour. This is
// independent of the per-user limit to catch attempts from one IP to log
// in to many different user accounts. We have a reasonably high limit
// since there may be only one apparent IP for all users at an institution.
if (!flood_is_allowed('failed_login_attempt_ip', variable_get('user_failed_login_ip_limit', 50), variable_get('user_failed_login_ip_window', 3600))) {
$form_state['flood_control_triggered'] = 'ip';
return;
}
$account = db_query("SELECT * FROM {users} WHERE name = :name AND status = 1", array(':name' => $form_state['values']['name']))->fetchObject();
if ($account) {
if (variable_get('user_failed_login_identifier_uid_only', FALSE)) {
// Register flood events based on the uid only, so they apply for any
// IP address. This is the most secure option.
$identifier = $account->uid;
}
else {
// The default identifier is a combination of uid and IP address. This
// is less secure but more resistant to denial-of-service attacks that
// could lock out all users with public user names.
$identifier = $account->uid . '-' . ip_address();
}
$form_state['flood_control_user_identifier'] = $identifier;
// Don't allow login if the limit for this user has been reached.
// Default is to allow 5 failed attempts every 6 hours.
if (!flood_is_allowed('failed_login_attempt_user', variable_get('user_failed_login_user_limit', 5), variable_get('user_failed_login_user_window', 21600), $identifier)) {
$form_state['flood_control_triggered'] = 'user';
return;
}
}
// We are not limited by flood control, so try to authenticate.
// Set $form_state['uid'] as a flag for user_login_final_validate().
$form_state['uid'] = user_authenticate($form_state['values']['name'], $password);
}
Die Grenzen sind tatsächlich zwei: eine für den Fall, dass Drupal immer eine IP hat, und eine für den Fall, dass Drupal auch eine Benutzer-ID hat. Letzteres gilt für den Fall, dass der Benutzer einen Benutzernamen für ein vorhandenes Konto eingibt. In diesem Fall registriert Drupal die Benutzer-ID und die IP.
Wenn Sie auch diesen Fall vermeiden möchten, müssen Sie auch diese Zeile zur Datei settings.php hinzufügen.
$conf['user_failed_login_user_limit'] = PHP_INT_MAX;
$conf['user_failed_login_user_window'] = 5;
settings.php
? IstPHP_INT_MAX
die unendliche Grenze? Kann ich dieses unendliche Limit (PHP_INT_MAX)user_failed_login_user_window
auch auf setzen? Weil es wie5
dort eingestellt ist.PHP_INT_MAX
ist der Maximalwert, den PHP einer Ganzzahl zuweisen kann. Ich habe den anderen Wert auf 5 gesetzt, da dies die Anzahl der Sekunden ist, für die das Limit gültig ist. Wenn Sie user_failed_login_user_limit auf 10 und user_failed_login_user_window auf 5 setzen, bedeutet dies, dass 10 Anmeldeversuche in 5 Sekunden zulässig sind. Ändern Sie einfach die Datei settings.php und die IPs / Benutzer werden nicht mehr blockiert.PHP_INT_MAX
ist 9223372036854775807; für eine 32-Bit-Maschine ist der Wert 2147483647. Sie sind korrekt; Das ist die Anzahl der Versuche in 5 Sekunden. Wenn die Anzahl der Versuche geringer ist, wird die IP / der Benutzer nicht blockiert.Das Hochwasserschutzmodul wird dies elegant handhaben.
quelle
In Drupal 8 können Sie die Flood-Einstellungen in der Konfigurationsdatei ändern
user.flood.yml
.Dies bedeutet, dass es pro IP und pro Benutzer ein Limit gibt:
Sie können die Einstellungen ändern und importieren (ich habe sie auf 100 Versuche pro 5 Minuten eingestellt):
quelle
$config['user.flood']['user_limit'] = 100;