.Htaccess Blocking Users:
User Blocking And Access Prevention Using .htaccess Files

The htaccess file is a wonder of website coding. It can do a great deal of things that we might otherwise be dependent on our host providers to do, in many cases charging admin fees to add the appropriate features to our accounts or to set it up in the first place. Unfortunately, though, the use of htaccess files is not always permitted by host providers because done incorrectly it can cause a security risk. Not only is this a problem for your site but it can also be a problem for other sites hosted on the same server. That said it is not impossible to find a host that offers the ability to use htaccess files and if you want to use htaccess files then you should look for a host that allows it.

Blocking Users

We already covered the use of htaccess to password protect pages and to use custom error pages but these are only two uses of the htaccess file. It is also possible to block users based on their IP addresses, IP ranges, referring domain, and block bots or automated software from accessing your site or folders. While the uses of blocking specific IP addresses are relatively limited the htaccess file does prevent an incredibly simple but effective method of doing just that should the need arise.

Blocking Users By IP Address

Blocking users by IP address or IP range are both very simple things to achieve and only require a couple of htaccess commands to be added to the appropriate htaccess file.

To block a single IP address add the following lines:

order allow,deny
deny from 111.22.3.4
allow from all

Blocking Users By IP Range


Because the commands are read and actioned from the top down it is important to close the block by using the allow function. Without doing this it can cause the htaccess script to keep running, slowing your site and your server. The code above would only block an individual with the IP address 111.22.3.4. However, the following code would block a range of IP addresses as we will discuss;

order allow,deny
deny from 111.22.3.
allow from all

Combining IP Blocking Methods


Instead of blocking an individual user this would block all users with an IP address beginning in 111.22.3 and allow all other users access to the folder. It is possible to combine these two methods in order to block a single user and a range of IP addresses using the following as an example:

order allow,deny
deny from 111.22.3.4
deny from 222.33.4.

allow from all

Blocking Users From Multiple Domains


Blocking users according to IP address or IP range is easy as you can see from these examples. A slightly more complex procedure, although still relatively easy, is to block users depending on the referrer that sent them. For example it is possible to block every user that visits your site from a link on the website www.blockreferrer.com and www.blockreferrer2.com by adding the following code to your htaccess file in the usual manner.

RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} blockreferrer\.com [NC,OR]
RewriteCond %{HTTP_REFERER} blockreferrer2\.com
RewriteRule .* - [F]

Obviously this blocks all users from visiting your site having followed a link from either of these two domains. This also includes sub-domains such as mail.blockreferrer.com or example.blockreferrer.com.

Blocking Users From A Single Domain


To block users visiting your website from a single referrer simply remove the second RewriteCond line (in this case the blockreferrer2\.com) line and remove the “OR” from the end of the first line. In our example your amended file would now read:

RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} blockreferrer\.com [NC]
RewriteRule .* - [F]

Blocking Bots And Offline Scripts


As well as blocking users it is also possible and often beneficial in terms of bandwidth or traffic resource to block bad bots and site scrapers. Below we provide the code to do this but obviously you will need to find the names of the bots to block.

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BadBot1 [OR]
RewriteCond %{HTTP_USER_AGENT} ^BadBot2
RewriteRule ^.* - [F,L]

In the above examples any users that are blocked because of the code you enter will be redirected to your 403 error page. Because they aren’t taking up your valuable bandwidth this can improve the speed of your website loading time for your other, genuine users. It may also prevent your server from completely failing, or crashing, thanks to an overload. By blocking bad bots it is also possible to prevent email harvesting software from taking your email address and sending you regular spam. Again, this is not only irritating but causes your mailbox usage to increase dramatically.

Securing Your htaccess File – Stop Prying Eyes


The process of preventing your htaccess file from being read is an incredibly easy one that requires four short lines of code to be placed into the htaccess file itself. The code required is as follows:

<Files .htaccess>
order allow,deny
deny from all
</Files>

This is another deny function similar to those discussed earlier in the article but the first line tells htaccess that you wish to block all users (deny from all) from accessing the .htaccess file (files .htaccess).

What Is Hotlinking?


Other methods exist, through the use of the htaccess file, to prevent the unwarranted usage of your bandwidth. Hot linking is an activity undertaken by people wanting to display images that appear on your website without saving and uploading the images to their own server. Leeching on your bandwidth in this way means that every time the image is downloaded to a user’s browser you essentially pay the price in bandwidth and potentially in money.

Preventing Hotlinking With A Denial


There are two methods to do this. One is a simple prevention of hot linking, essentially banning all domains except your own from showing this content and instead displaying a broken image icon. The other enables you to display an alternative image whenever hot linking is detected. While this may still use your bandwidth initially, the perpetrator of the hot linking is unlikely to continue displaying the image once he or she realizes that it isn’t what they were intending.

rewriteEngine on
rewriteCond %{HTTP_REFERER} !^$
rewriteCond %{HTTP_REFERER} !^http://(www\.)?your-website.com/.*$ [NC]
rewriteRule \.(gif|jpg|js)$ - [F]

Replacing Images In Hotlinks


This version displays the broken link icon or a similar icon. The last line is used to determine the types of file that this works for. In this case gif, jpg, and js files cannot be hotlinked from outside the your-website.com domain. In order to replace an image and display an alternative image, use the following code in your htaccess file:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?your-website.com/.*$ [NC]
RewriteRule \.(gif|jpg)$ http://www.your-website.com/nohotlink.jpg [R,L]

Again, you need to replace the your-website.com with your own domain and the image path on the bottom line with the path to the replacement image.

Preventing The Display Of All Your Directory Contents


Preventing access to an index of images or files is a good idea for the sake of site security and often because you simply don’t want people to browse through the images on your site out of context. Many hosts provide this as a matter of course, with all indexes being invisible to visitors. However, this may not be the case with the host you are currently using. As long as you do, instead, have access to your htaccess file then it needn’t be a problem and is in fact one of the easiest htaccess commands to include.

IndexIgnore *

Adding this to the htaccess file in any directory will prevent the index for that directory, and all subdirectories, from being displayed. This means that placing it in the root folder of your site will prevent all indexes from being displayed.

Limiting Directory Viewing


By adding a limiter after the wild card symbol “*”it is possible to specify the types of file you wish to restrict within the index.

IndexIgnore *.jpg

Enabling The Display Of Directory Contents


This means that any .jpg files within that directory and subdirectories will not be listed when the directory listing is shown. Sometimes you may want to display the contents of a particular subdirectory but not the parent directory. Include either of the two above examples in the directory itself. In the subdirectory that you wish to display include an htaccess file with the following command:

Options +Indexes

Conclusion


For many people it is a surprise to learn that the simple htaccess file has so many uses but we have really only scratched on the surface of its potential. As well as these simple commands it is possible to command redirects, add MIME types, and enable Server Side Includes (SSI). If you want a greater degree of control over your own website than you currently have then htaccess provides an excellent way to go about this.

The most important thing is to check that your host allows you to amend or edit your htaccess file, or even to add one in the first place. Used incorrectly they can cause a security threat to your website, the server, and other websites hosted on your server. However it is also possible to reduce the amount of spam you receive, cut down your bandwidth usage, prevent others from accessing your site, and much more. Htaccess commands are refreshingly simply to include even for the complete beginner.