domingo, 3 de febrero de 2013

Configurar el archivo .htaccess de Apache


.htaccess es un archivo de configuración para el Servidor HTTP de Apache, a partir de este archivo se pueden introducir diferentes directivas de configuración, bien a un directorio y a todos los subdirectorios, o a directorios específicos.

A continuación se van a mostrar algunas configuraciones útiles ...

· Indicar la página principal por defecto ...

DirectoryIndex index.php index.html

Con esta configuración si alguien accede a http://ejemplo.com, será llevado como default a la página index.php


· Evitar el acceso a archivos con una determinada extensión ...

<FilesMatch "\.(htaccess|htpasswd|txt|sql|php)$">
 Order Allow,Deny
 Deny from all
</FilesMatch>

Esta configuración impide el acceso a archivos con extensión .htaccess .htpasswd, .txt, .sql, .php (devuelve un error 403), esto afecta al directorio donde es guardado el archivo .htaccess y a sus subdirectorios, aunque a los subdirectorio también se les puede agregar unas directrices específicas con otro archivo .htaccess distintas a las del directorio principal.


· Evitar el acceso a un archivo específico ...

<Files archivo.php>
Order allow,deny
Deny from all
</Files>

En este caso si intentas acceder al archivo "archivo.php", obtendrás un error 403, esto no afecta a la inclusion del archivo en otro archivo .php, con la ventaja de que sólo es accesible desde el script php dónde lo necesites, pero no para posibles hackers.


· Reescritura de URL, quitar el www de la URL

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{http_host} ^www\.ejemplo\.com[nc]
RewriteRule ^(.*)$ http://ejemplo.com/$1 [r=301,nc]

De esto modo si alguien intenta acceder a la web escribiendo http://www.ejemplo.com, .htaccess lo llevará a http://ejemplo.com


· Página personalizada para cada tipo de error

ErrorDocument 401 /error/401.php
ErrorDocument 403 /error/403.php
ErrorDocument 404 /error/404.php
ErrorDocument 500 /error/500.php

Así cada vez que salte alguno de los errores anteriores se redireccionará al archivo concreto.


· Evitar ataque ddos

# Protegerse contra los ataques DOS limitando el tamaño de subida de archivos  a 10 mb
LimitRequestBody 10240000


· Denegar el acceso completo a una determinada carpeta

#deny all access
deny from all

Crear un archivo .htaccess y guardarlo en la carpeta específica.


· Permitir el acceso desde una IP específica:

#deny all access
deny from all
allow from 212.120.111.112

En este caso sólo se tendrá acceso a la carpeta desde la IP 212.120.111.112


· Evitar el listado de carpetas

IndexIgnore *

Agregarlo al .htaccess principal así nadie podrá acceder al listado de archivos.


· Redirigir peticiones a una subcarpeta en concreto

RewriteEngine on
RewriteCond % ^midominio.com\.com$
RewriteRule (.*) http://www.midominio.com/$1 [R=301,L]
RewriteRule ^$ carpeta [L]

Cambiar carpeta por el nombre de la subcarpeta a la que se quiere enviar la redirección.


· Quitar palabras concretas de la URL

RewriteRule ^no-carpeta/(.+)$ http://www.midominio.com/$1 [R=301,L]

De esto modo si alguien va a la url http://www.midominio.com/no-carpeta/default.php se mostrará la URL de la siguiente forma ... http://www.midominio.com/default.php


· Bloquear robots maliciosos.

Las siguientes directrices son útiles para evitar a los robots que ignoran el archivo robots.txt a la descarga de los archivos no permitidos, llevándolos a un error 403

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule .* - [F]


. Evitar el hotlink.
El hotlink es el uso externo de determinados archivos del servidor como pueden ser las imágenes, esto puede producir lentitud ya que si el uso externo es extenso afectará al rendimiento del sitio web. Ejemplo de evitar el hotlink de imágenes ...

RewriteEngine on
# Options +FollowSymlinks
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?midominio.com/.*$ [NC]
RewriteRule .*\.(jpe?g|gif|bmp|png)$ [L]

Esto sólo permite el uso de las imágenes en el sitio web, si quieres añadir más sitios de confianza puedes agregar cuantas líneas necesites ... 
RewriteCond %{HTTP_REFERER} !^http://www.otrositio.com/.*$ [NC]

Si la web está dividida en distintas subcarpetas de imágenes, y únicamente se quiere impedir el acceso a una de ellas, crear un archivo .htaccess con las directrices en el subdirectorio al que no se quiere permitir el acceso.


· Proteger carpetas con .htpasswd

Cuando queremos proteger una carpeta o ficheros con un usuario y contraseña, podemos utilizar,  junto el .htaccess, un .htpasswd.

Se necesita crear un fichero .htaccess y un .htpasswd.

En el fichero .htpasswd introducimos lo siguiente:

usuario:contraseña

Para crear contraseñas encriptadas puede acceder al siguiente enlace donde puede crear el código que necesita en su .htpasswd.

https://www.cdmon.com/webapps/

Una vez tenga el .htpasswd con el código correcto, se debe crear un fichero .htaccess con el siguiente código:

AuthUserFile /ruta/absoluta/hacia/.htpasswd
AuthName "Necesita validarse"
AuthType Basic
require user usuario

Donde en AuthUserFile es la ruta entera de donde se encuentra el .htpasswd, AuthName es el mensaje que aparecerá en la ventana donde le solicita el usuario y la contraseña, y require user es el nombre del usuario a introducir.


No hay comentarios: