Как отключить автозаполнение на странице wp-login.php

28 авг. 2014 г., 21:24:00
Просмотры: 17.5K
Голосов: 6

Похоже, нет простого способа добавить атрибут autocomplete="off" к полю ввода пароля на странице входа WordPress без прямого редактирования файла wp-login.php.

Может я что-то упускаю? Я не хочу изменять основные файлы системы.

1
Комментарии

Это проблема соответствия стандарту PCI. Ни один веб-сайт не пройдет проверку на соответствие PCI, если поля для пароля разрешают автозаполнение.

Christopher Eller Christopher Eller
15 дек. 2015 г. 20:40:19
Все ответы на вопрос 6
1

Ваше единственное решение (без изменения основных файлов) — использовать JavaScript.

function wpse_159462_login_form() {
    echo <<<html
<script>
    document.getElementById( "user_pass" ).autocomplete = "off";
</script>
html;
}

add_action( 'login_form', 'wpse_159462_login_form' );

Тем не менее, если вы не единственный, кто будет входить в систему, я не рекомендую отключать автозаполнение — это почти наверняка разозлит людей.

28 авг. 2014 г. 21:42:26
Комментарии

Куда это идет?

TheBlackBenzKid TheBlackBenzKid
25 окт. 2018 г. 09:41:04
1

Если кому-то интересно, вот решение, которое сработало у меня

if ( $GLOBALS['pagenow'] === 'wp-login.php' ) {
  ob_start();
}

add_action('login_form', function($args) {
  $login = ob_get_contents();
  ob_clean();
  $login = str_replace('id="user_pass"', 'id="user_pass" autocomplete="off"', $login);
  $login = str_replace('id="user_login"', 'id="user_login" autocomplete="off"', $login);
  echo $login; 
}, 9999);
22 нояб. 2017 г. 11:47:14
Комментарии

Вы можете поместить ob_start() в действие "login_form_login" вместо условия if

Peter Ajtai Peter Ajtai
1 сент. 2023 г. 03:45:54
0

Вот решение, которое я придумал, используя только PHP:

function disable_autofill_password($safe_text, $text) {
    if($safe_text === 'user_pass') {
        $safe_text .= '" autocomplete="new-password';
    }
    return $safe_text;
}
add_filter('attribute_escape', 'disable_autofill_password', 10, 2);

Это небольшой хак для фильтра esc_attr. Он закрывает атрибут id поля ввода пароля, а затем добавляет атрибут autocomplete (значение new-password используется для Chrome).

6 сент. 2016 г. 15:17:40
0

Кто-то уже создал плагин для этого. Он не представлен в официальном каталоге WordPress, но довольно прост и отлично работает. Хорошая практика — изучить исходный код, если вы сомневаетесь в плагинах, не указанных в каталоге WP. Я проверил его, и там нет ничего подозрительного.

Посмотреть код можно здесь: https://www.buzelac.com/2014/10/disabling-wordpress-login-password-autocomplete/

Или скачать плагин здесь: https://www.buzelac.com/wp-content/uploads/2015/05/disable-login-autocomplete.zip

В нём нет ничего сложного — он просто заменяет 'id="user_pass"' на 'id="user_pass" autocomplete="off"' при генерации формы входа:

$content = str_replace('id="user_pass"', 'id="user_pass" autocomplete="off"', $content);

7 мар. 2019 г. 14:21:51
0

Попробуйте буферизацию вывода в PHP:

add_action('login_header', function () {
    ob_start();
});

add_action('login_footer', function () {
    $content = ob_get_clean();
    $content = str_replace(' name="log"', ' name="log" autocomplete="off"', $content);
    $content = str_replace(' name="pwd"', ' name="pwd" autocomplete="off"', $content);
    echo $content;
});
5 нояб. 2019 г. 04:47:54
1
-4

Откройте ваш файл wp-login.php и добавьте атрибут autocomplete="off" в поле "Имя пользователя". Найдите форму с именем loginform и добавьте следующим образом:

class="input" value="" size="20" autocomplete="off"/>

8 мар. 2017 г. 11:52:13
Комментарии

Он сказал, что не хочет изменять основные файлы. Также вы никогда не должны изменять основные поля.

Laxmana Laxmana
8 мар. 2017 г. 14:34:10