Evitar el robo de imágenes y ancho de banda con htaccess

Revisando los logs del servidor de una de mis web me descubierto que gran parte del ancho de banda se lo estaban “comiendo” en fotos y otras webs que usaban las imágenes de mi servidor. He buscado un poco en Google y he encontrado este post en Abadia Digital en el que explican cómo hacerlo.

He aquí el “truco”:

Busca un fichero llamado .htaccess en el directorio raíz de tu web, si no existe créalo (ojo, en algunos servidores no se muestra en los listados de FTP así que asegúrate bien). Añade estas líneas:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://tu-dominio.com [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tu-dominio.com [NC]
RewriteRule .*\.(gif|jpg|swf|png|jpeg)$ - [NC,F] 

Importante: Prueba que tu web sigue funcionando después de hacer estos cambios. En caso de que tengas algo como un error 500 deberías deshacer los cambios en .htaccess.

También se indica cómo hacer para sustituir la imagen “robada” por otra que elijas. Para más información ir a la fuente.

Actualización:

El sistema que indican en el enlace que comentaba arriba no me ha funcionado bien. El qué sí que me ha funcionado es:

RewriteRule .*\.(gif|jpg|swf|png|jpeg)$ nueva_imagen.gif [L]

donde nueva_imagen.gif es la imagen por la que queremos sustituir la original.

Qué hacer cuando una página en PHP aparece en blanco

Si te dedicas a la programación en PHP probablemente te habrás encontrado en alguna ocasión con la siguiente situación: cuando entras en una determinada página en PHP aparece en blanco pero no se muestra ningún error.

¿Qué es lo que está sucediendo? Lo más seguro es que en el fichero php.ini esté desactivada la opción de mostrar errores. Esta es una práctica muy habitual en las compañías que ofrecen alojamiento web, se suele hacer porque en un servidor en producción no es aconsejable mostrar errores para no dar pistas a los posibles atacantes.

¿Cómo solucionarlo?

1) Si tienes acceso al fichero php.ini busca la linea que dice:

error_reporting = ...

y cámbiala para que quede así:

error_reporting = E_ALL & ~E_NOTICE

Si la línea comienza con un ‘;’ quítalo; se usa para indicar que la línea es un comentario.

2) Si no tienes acceso al fichero php.ini (que es la situación más habitual si tienes contratado el hosting con otra compañía):

Puedes usar este “truquillo” que encontré en la web oficial de PHP: Añade el siguiente código al comienzo de la página que te está dando problemas:

set_error_handler('errorHandler');

function errorHandler( $errno, $errstr, $errfile, $errline, $errcontext)
{
  echo 'Into '.__FUNCTION__.'() at line '.__LINE__.
  "\n\n---ERRNO---\n". print_r( $errno, true).
  "\n\n---ERRSTR---\n". print_r( $errstr, true).
  "\n\n---ERRFILE---\n". print_r( $errfile, true).
  "\n\n---ERRLINE---\n". print_r( $errline, true).
  "\n\n---ERRCONTEXT---\n".print_r( $errcontext, true).
  "\n\nBacktrace of errorHandler()\n".
  print_r( debug_backtrace(), true);
}

Esto me hará un rastreo de los errores. Seguramente te aparecerá la información muy confusa, puedes ver el código fuente de la página resultante para analizar mejor el error (queda mejor formateado).

Existe también una clase llamada Errorhandler que nos permite visualizar y gestionar los errores de la forma que nos resulte más cómoda.

LAMP en Ubuntu

Instalar LAMP (abreviatura para Linux, Apache, Mysql, PHP/Perl/Phyton) en Ubuntu es sencillo:

sudo apt-get install php5 apache2 mysql-server

Es posible que no funcione el soporte PHP para MySQL, en ese caso son necesarios tres pasos más:

  1. Añadir el soporte para MySQL:
    sudo apt-get install php5-mysql
  2. Editar el fichero php.ini:
    sudo gedit /etc/php5/apache2/php.ini

    buscar la línea: ;extension=mysql.so y eliminar el ‘;’ del comienzo (‘;’ es el carácter que se usa para comentar líneas en php.ini)

  3. Reiniciar apache (yo lo hago desde el panel de control de Webmin.

¡y listo! 🙂

Puede que interese añadir soporte para PEAR, Curl o GD:

apt-get install php5-cli php-pear php5-curl php5-gd

Y no puede faltar PHPMyAdmin:

apt-get install phpmyadmin

Más información en inglés aquí:
http://www.linuxforums.org/servers/setting_up_a_server.html.