Drupal blokuje adres IP używany do uzyskania dostępu do strony, gdy użytkownik próbuje zalogować się wiele razy.
Jak mogę wyłączyć tę funkcję?
Co możesz zrobić, to dodać następujący kod w pliku settings.php.
$conf['user_failed_login_ip_limit'] = PHP_INT_MAX;
W ten sposób adres IP nie zostanie zablokowany.
user_login_authenticate_validate () zawiera następujący kod.
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);
}
Granice są w rzeczywistości dwa: jeden w przypadku, gdy Drupal ma zawsze adres IP, a drugi, gdy Drupal ma również identyfikator użytkownika. To drugie dotyczy przypadku, gdy użytkownik wprowadzi nazwę użytkownika dla istniejącego konta; w takim przypadku Drupal rejestruje identyfikator użytkownika i adres IP.
Jeśli chcesz również uniknąć tego przypadku, musisz również dodać tę linię do pliku setting.php.
$conf['user_failed_login_user_limit'] = PHP_INT_MAX;
$conf['user_failed_login_user_window'] = 5;
settings.php
? CzyPHP_INT_MAX
nieskończony limit? Czy mogę również ustawić ten nieskończony limit (PHP_INT_MAX)user_failed_login_user_window
również na? Ponieważ jest ustawiony jak5
tam.PHP_INT_MAX
to maksymalna wartość, jaką PHP może przypisać do liczby całkowitej. Ustawiłem drugą wartość na 5, ponieważ jest to liczba sekund, przez którą obowiązuje limit. Jeśli ustawisz user_failed_login_user_limit na 10, a user_failed_login_user_window na 5, oznacza to, że 10 prób logowania jest dozwolonych w 5 sekund. Wystarczy zmienić plik settings.php, a adresy IP / użytkownicy nie będą już blokowani.PHP_INT_MAX
jest to 9223372036854775807; dla maszyny 32-bitowej jej wartość to 2147483647. Masz rację; to liczba prób w ciągu 5 sekund. Jeśli liczba prób jest niższa, adres IP / użytkownik nie jest blokowany.Moduł Flood Control poradzi sobie z tym elegancko.
źródło
W Drupal 8 możesz zmienić ustawienia powodzi w pliku konfiguracyjnym
user.flood.yml
.Oznacza to, że na adres IP i na użytkownika istnieje limit:
Możesz zmienić i zaimportować ustawienia (ustawiłem na 100 prób na 5 minut):
źródło
$config['user.flood']['user_limit'] = 100;