Skip to main content

Protect wp-admin by Basic Auth

Protect wp-admin by Basic Auth

You have to protect the wp-admin / wp-login.php at least by the baisc-auth if you do not want to do it using Cloduflare

Here is the steps to Protect it

  • You have to know the full path of your website root, you can use getcwd() or __DIR__
  • Create a directory outside the root and name it to something like (.htpasswds) this will allow to save all password withouot accessing them from the website root
  • lets assume that your root of the website is /var/www/.htpasswds
  • in that case the htpasswds will be  /var/www/public_html
  • in Your .htaccess file in the website root you have to add this code  ({website domain is optional only to organzie the passwords and you can choose any thing you want})
    <FilesMatch "wp-login.php">
        AuthName "Authorized Only"
        AuthType Basic
        AuthUserFile /var/www/.htpasswds/{website domain}/.htpasswd
        require valid-user
    </FilesMatch>
  • now in .htpasswd file  you can add your access as you want , follow one of the below articles to create a username and password 

 

to Create a password by SSH command follow the below Steps

Create the Password File
We now have access to the htpasswd command. We can use this to create a password file that Apache can use to authenticate users. We will create a hidden file for this purpose called .htpasswd within our /etc/apache2 configuration directory.

The first time we use this utility, we need to add the -c option to create the specified file. We specify a username (sammy in this example) at the end of the command to create a new entry within the file:

sudo htpasswd -c /etc/apache2/.htpasswd another_user1

You will be asked to supply and confirm a password for the user.

Leave out the -c argument for any additional users you wish to add:

sudo htpasswd /etc/apache2/.htpasswd another_user2

If we view the contents of the file, we can see the username and the encrypted password for each record:

cat /etc/apache2/.htpasswd

 

Output
another_user1:$apr1$lzxsIfXG$tmCvCfb49vpPFwKGVsuYz.
another_user:$apr1$p1E9MeAf$kiAhneUwr.MhAE2kKGYHK.

 

Another way is to use cookies to protect wp-admin/wp-login.php

the main idea here is to check if the cookies is exist then continue to the backend , if not then it will be redirected to the homepage

in the .htaccess file add these two parts 


<FilesMatch "wp-admin">
RewriteEngine On
RewriteCond %{HTTP_COOKIE} !itweb-wp-login=2917998723; [NC]
RewriteRule ^ http://google.com [NC,L]
</FilesMatch>

<FilesMatch "wp-login.php">
RewriteEngine On
RewriteCond %{HTTP_COOKIE} !itweb-wp-login=2917998723; [NC]
RewriteRule ^ http://google.com[NC,L]
</FilesMatch>

 

and create new PHP file to set this cookies manually , lets call it set_cookies.php and add this code 

 

<?php
setcookie("itweb-wp-login", 2917998723);
header("Location: wp-login.php");

 

    Reference 

    How To Set Up Password Authentication with Apache on Ubuntu 14.04 | DigitalOcean

    How To Change WordPress Login URL Without Plugin: 3 Methods (mediumtalk.net)