Enmascarar extensiones de las paginas Web

Una medida más de seguridad para nuestros sitios Web puede ser la ocultación enmascaración de las extensiones de los ficheros. De esta manera nadie sabe en que lenguaje está programado el sitio.

EJ: en vez de mostrar la url index.php que muestre index.html o index.dryts

Aquí os dejo el script que acabo de hacer con htaccess

RewriteEngine On
RewriteCond %{REQUEST_URI} .html [NC]
RewriteRule ^(.*)\.html$ $1.php

Estas 3 simples líneas hacen que cualquier petición html sea tratada como un php.
En el servidor no tendremos los archivos como html sino como php que es lo que realmente son.

RewriteEngine On
[Activa la sobre-escritura de la URL]
RewriteCond
[indica que empieza una condición (como un if de toda la vida)]
%{REQUEST_URI}
[obtiene la petición del fichero]
[NC]
[indica que la condición es insensible a mayúsculas y minúsculas]
RewriteRule
[Si se cumple la condición escribe la regla]
^(.*)\.html$ $1.php
[expresión regular que saca el nombre del fichero de la petición y le cambia la extensión]

EJ:

  • 1-Se llama a dryts.html
  • 2-Se realiza la condición, como es un .html entra en la condición
  • 3-Escribe la regla
    • La expresión regular ^(.*) obtiene el nombre del fichero (dryts), este nombre se guarda en la variable $1.
    • Acto seguido le decimos que procese la petición pero en vez del fichero dryts.html el fichero dryts.php

Un breve repaso de los caracteres de las expresiones regulares en apache (información de la web oficial de apache)
Text:

  • . => [Any single character]
  • [chars] => [Character class: One of chars]
  • [^chars] => [Character class: None of chars]
  • text1|text2 => [Alternative: text1 or text2]

Quantifiers:

  • ? => [0 or 1 of the preceding text]
  • * => [0 or N of the preceding text (N > 0)]
  • + => [1 or N of the preceding text (N > 1)]

Grouping:

  • (text) => [Grouping of text (either to set the borders of an alternative or for making backreferences where the Nth group can be used on the RHS of a RewriteRule with $N)]

Anchors:

  • ^ => [Start of line anchor]
  • $ => [End of line anchor]

Escaping:

  • \char => [escape that particular char (for instance to specify the chars ".[]()” etc.)]

Con este breve repaso os explico que hace la expresión utilizada en el script

^(.*)\.html$

^ => [empieza por]
(.*) => [agrupa todo tipo de letras, números, símbolos,etc que pueden estar 0 o N veces]
\.html$ => [el $ indica que es el final de la expresión mientras que la \ es para escapar el . de .html]

Más información sobre mod_rewrtie aquí

NOTA: se necesita tener activado el modulo mod_rewrite de apache.
Abrir el httpd.conf (C:\wamp\bin\apache\apache2.2.8\conf\httpd.conf) y quitar la # de delante de #LoadModule rewrite_module modules/mod_rewrite.so

Proyecto totalmente en localhost

En este mini manual se utilizará el servidor Apache, para instalarlo de manera fácil nos podemos bajar wamp que es un suit que contiene apache, php y mysql.

Qué queremos conseguir?
Queremos hacer un proyecto/página Web totalmente en localhost haciendo todas las pruebas en local para luego poder subirlo sin encontrarnos sorpresas.

Porque es necesario poner el dominio?
Nos puede interesar hacer subdominios, parsear la URL para hacerla amigable, obtener información, etc.

Una utilidad de este manual?
Por ejemplo queremos que dryts.com tenga subdominios virtuales.
http://blog.dryts.com que tenga el blog
http://dani.dryts.com que tenga la información personal
http://fotos.dryts.com galería de fotos personales
Para poder hacer que funcionen los subdominios y ponerle seguridad se tiene que parsear la URL.
Para no tener que realizar cambios al subirlo al servidor se utiliza el mismo nombre del servidor en localhost para realizar todas las pruebas.

Lo primero es elegir el nombre del dominio que tendrá.
Ejemplo: dryts.com
Para evitar que al introducir dryts.com el navegador busque en Internet tenemos que editar el fichero de host de windows.
En windows XP el fichero se encuentra en la siguiente ruta:
C:\WINDOWS\system32\drivers\etc\hosts
El fichero hosts no tiene extensión pero es texto plano, se puede editar con el bloc de notas mismo.
Seguramente este fichero contenga sólo 1 línea

127.0.0.1       localhost

Añadimos el nombre del dominio que queremos utilizar de forma local

127.0.0.1       dryts.com

Qué hace esta línea?
Esta línea le dice al navegador que cuando alguien escriba dryts.com lo redirija a la ip 127.0.0.1 (la propia maquina [localhost, dirección de loopback])
Al ser redirigido al pc que se está utilizando la petición es recibida por el servidor Apache.

Cómo configurar el servidor apache para que dicha petición se ejecute correctamente?
Una vez instalado apache buscamos su fichero de configuración.
En la suit Wamp está en la dirección C:\wamp\bin\apache\apache2.2.8\conf\extra\httpd-vhosts.conf
El fichero httpd-vhosts.conf es texto plano por lo tanto se puede abrir con el block de notas.
Añadimos la línea

NameVirtualHost dryts.com

y

<VirtualHost dryts.com>
	DocumentRoot "C:/wamp/www/NOMBRECARPETA/"
</VirtualHost>

Con estos simples pasos una vez el servidor esté encendido si escribiremos dryts.com ejecutará la página Web que tengamos alojada localmente en C:/wamp/www/NOMBRECARPETA/ una vez esté acabado el proyecto/página Web se sube al servidor sin necesidad de realizar ningún cambio.

NOTA: HAY QUE TENER EN CUENTA QUE SI SE ESCRIBE WWW.DRYTS.COM LO CONSIDERA UNA DIRECCIÓN DIFERENTE A DRYTS.COM, SI SE QUIERE LA REDIRECCIÓN TAMBIÉN CON EL WWW.DRYTS.COM SE AÑADE LA MISMA REGLA PERO CON LOS WWW.
TAMBIÉN HAY QUE TENER EN CUENTA QUE UNA VEZ SE HAYA ACABADO EL DESARROLLO Y SE SUBA AL SERVIDOR HAY QUE DESACTIVAR LA REGLA DEL FICHERO DE “C:\WINDOWS\system32\drivers\etc\hosts” DE WINDOWS DE LO CONTRARIO SIEMPRE VEREMOS LA VERSIÓN DE LOCALHOST.

httpd.conf Apache

Cosas básicas sobre el fichero httpd.conf de Apache:

  • ServerRoot “c:/wamp/bin/apache/apache2.2.8″
    [ Dirección del servidor apache ]
  • Listen 80
    [ Puerto que "escucha" apache ]
  • LoadModule XXXX
    [ Listado de Módulos que podemos activar/desactivar ]*
  • ServerName localhost:80
    [ Nombre del servidor POR DEFECTO y puerto relacionado, el puerto no hace falta que esté puesto ]
  • Continue reading