|
Power of htaccess and mod rewrite - 3.5-Apollo |
This write-up looks at extending Apache’s basic authentication allowing users to log-in to individual pages or folders. Each user is allocated a unique name and password, users are validated using Apache’s basic authentication once logged in are redirected using mod rewrite to the appropriate page or folder.
This document has been superseded by Basic Authentication which covers password protecting folders and individual files. It also covers how to secure these using SSL hence names, passwords and data are sent encrypted over the Internet.
Uniform Server already has this authentication mechanism in place.
Name-password pairs are stored in the file .htpasswd located in folder *\Uniform Server\udrive\htpasswd\www it has the default pair root:root (order name:password)
To enable Uniform Server as a private server open the file .htaccess contained in folder www and uncomment the following four lines as shown:
AuthName "Uniform Server - Server Access" AuthType Basic AuthUserFile /htpasswd/www/.htpasswd Require valid-user
Run the servers, type http:/localhost into your browser address bar and you will be challenged for a user name and password, to gain access enter root and root.
The htaccess file protects the folder it’s contained in and all sub-folders hence if you try to directly access a page anywhere on the server you will be challenged. Validation is stored meaning you are required to authenticate only once and will not be challenged again.
Note 1: When testing this can be a problem because you need to reset the stored validation the only way I know of doing this is to restart the browser. This breaks the server link removing any stored information. Another minor irritation is stored pages in the browser cache; clean this to avoid misleading results.
Generally you would like to have an Internet presence hence do not want to protect the entire server only a small area. On the main index page you would provide a login link to this protected area. Its possible to restrict users to a single page or restrict them to a private folder, I cover these two options below.
Note 2: Before continuing restore the above four lines back to their defaults as shown below:
#AuthName "Uniform Server - Server Access" #AuthType Basic #AuthUserFile /htpasswd/www/.htpasswd #Require valid-user
Apache's basic authentication is not very flexible however you can bend it a little using mod rewrite and create something usful without the need for any scripting such as PHP or Perl.
You must use a secured server so name/password pair and personal data on a page are encrypted. That said you can test on a standard Uniform Server installation.
This solution uses only a .htacces file with mode-rewrite performing the redirection this example demonstrates the concept.
John:21 Dave Smith:22 Mike:23
Use real passwords e.g Mst23Xfrs (21,22,23 makes it easier to test).
Note: You can use spaces in the name.
AuthUserFile /htpasswd/www/.htpasswd
Require valid-user
Options +FollowSymLinks
#Options +Indexes
RewriteEngine On
RewriteBase /
RewriteCond $1 !^John\.html
RewriteCond %{REMOTE_user} ^John$
RewriteRule (.*) /secure/John.html [R,L]
RewriteCond $1 !^Dave\.html
RewriteCond %{REMOTE_user} ^Dave\ Smith$
RewriteRule (.*) /secure/Dave.html [R,L]
RewriteCond $1 !^Mike\.html
RewriteCond %{REMOTE_user} ^Mike$
RewriteRule (.*) /secure/Mike.html [R,L]
Note 1: The space between Dave Smith needs to be escaped using a backslash “\ “ (without the quotes)
Note 2: You will need to restart your browser to re-login.
I stress the need for encryption because when using http, name/password is sent in plain text.
The above restricts a user to a single page all links within that page will map back to itself. Its very restrictive in that each page can contain only pure text (html) no images or access to other pages other than the non-restricted area.
The following removes these restrictions by allocating a folder to a user it can include sub-folders images and download files.
You must use a secured server so name/password pair and personal data on pages are encrypted. That said you can test on a standard Uniform Server installation.
Again this solution uses only a .htacces file with mode-rewrite performing the redirection this example demonstrates the concept.
John:21 Dave Smith:22 Mike:23 Jane:41 Dawn:42 Ruth Smith:43
Use real passwords e.g X78Mst23Xfrs (41,42,43 makes it easier to test).
Note: Remember as previously stated you can use spaces in names.
AuthName "Private area Please Login"
AuthType Basic
AuthUserFile /htpasswd/www/.htpasswd
Require valid-user
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteEngine on
RewriteCond $1 !^mpg1/
RewriteCond %{REMOTE_user} ^Jane$
RewriteRule ^(.*) secure2/mpg1/$1 [R,L]
RewriteCond $1 !^mpg2/
RewriteCond %{REMOTE_user} ^Dawn$
RewriteRule ^(.*) secure2/mpg2/$1 [R,L]
RewriteCond $1 !^mpg3/
RewriteCond %{REMOTE_user} ^Ruth\ Smith$
RewriteRule ^(.*) secure2/mpg3/$1 [R,L]
Note 1: The space between Ruth Smith needs to be escaped using a backslash “\ “ (without the quotes)
Note 2: You will need to restart your browser to re-login.
Again I stress the need for encryption because when using http, name/password is sent in plain text.
One of the most difficult things to do is take the information given and try to implement it. From bitter experience, sometimes cut and past introduces additional characters which prevent things working. Even worst the instructions are difficult to follow or a crutial pieces of information are missing.
I like working examples that can be hacked around hence the above have been integrated into two mini-servers you can download and experiment with these.
I have shown how to enhance basic authentication using mod rewrite, it does not use any fancy scripts hence can be applied to a basic Apache server. Security is of prime importance either enable SSL on the server or use Stunnel to encrypt data if using a basic server.
| | Ric |