Этот вопрос связан с предыдущим вопросом, который я задал, но это другое.
Я использую htaccess для управления входом в http://somesite.com/folder
.
После входа в систему у меня есть php-код в folder/index.php
чтобы проверить имя пользователя и пароль, используемые для входа в систему: $_SERVER['PHP_AUTH_USER']
и $_SERVER['PHP_AUTH_PW']
. Я регистрирую эту информацию в базе данных.
Это работает, когда пользователь поставляет хорошее имя пользователя и пароль, но когда он неверен, ничего не происходит – я полагаю, потому что /index.php
никогда не достигается.
Есть ли способ входа в систему и неудачные попытки входа в систему?
Это простой способ сделать это. В вашем .htaccess добавьте
ErrorDocument 401 /path/to/log.php
Этот log.php
вызывается при неудачной попытке входа в систему (вы также можете поместить его в защищенный каталог, он будет достигнут, даже если логин завершится с ошибкой). Обратите внимание, что браузер не знает, нуждается ли какой-то ресурс в аутентификации, поэтому вы всегда получите удар для первой попытки. Эти попытки, однако, не будут содержать имени пользователя, и вы можете их обнаружить (ну, вы можете отличить их от того, когда пользователь не вводит имя пользователя, но вы получите эту идею), проверив, является ли $_SERVER['PHP_AUTH_USER']
пустым.
Ну, нет, как вы говорите, /index.php
никогда не достигается.
Что вы можете сделать, так это не полагаться на Apache вообще и обрабатывать аутентификацию только с помощью PHP. На этой странице руководства показано, как. Это имеет большой недостаток. Допустим, вы защитили весь каталог. В этом каталоге есть файлы PHP, изображения и многое другое. Теперь, чтобы обеспечить аутентификацию, вы должны маршрутизировать все через файл PHP. Если у вас есть только файлы PHP, вы можете сделать это с помощью include. Если у вас есть статическое содержимое, вы должны направить его с помощью правила перезаписи через файлы PHP, которые читают и выводят статический контент, что повредит производительности.
Если ваша цель состоит в том, чтобы заблокировать пользователей, которые неоднократно отказываются от проверки подлинности, вы можете использовать базовый auth для Apache и просто установить fail2ban . Установите его и забудьте!