miércoles, 12 de agosto de 2015

Cómo detectar y eliminar malware en tu web





Ya es conocido el uso de los virus, gusano, troyanos y el software espía que pueden dañar un equipo o una red, pero desde hace décadas que lo que se persigue es hackear y atacar páginas webs, así como los servidores, routers,etc..
Entre los últimos ataques están los que residen en comprometer la integridad de tu página web por diferentes motivos. Los 3 casos más comunes son (hay otros ataques más frecuentes como por ejemplo los de tipo DoS o denegación de servicio pero que atacan a un servidor entero, independientemente de las webs o servicios que aloje)
  • Ataques de php injection o de otro tipo para incluir código. Script maliciosos
  • Redirecciones .htaccess
  • Iframes ocultos
Script maliciosos
Éstos códigos se usan a menudo para redireccionar a tus visitantes o lectores a una web diferente y/o cargan malware desde otro código. Son injectados en el contenido de la página web o a veces en otros archivos del servidor, como imágenes o PDFs. Suelen ser código javascript que ejecuta la redirección. Puede ser que están ofuscados para que sea más difícil detectarlo para los scanner anti-virus/malware y para que al programador sea más difícil entenderte que hace el código malware.

A veces los códigos ejecutan archivos .js bajo nombres de dominio que pueden confundir aparentando ser web legítimas.

Redirecciones .htaccess
Hay que tener especial cuidado con este archivo de configuración del servidor de páginas web Apache, sobre todo porque es un archivo oculto.
Los atacantes pueden modificar el archivo o subir uno nuevo, si no se tiene cuidado con los permisos. Con esto conseguirán redireccionar a todos los usuarios que entren en la web a páginas de malware o lo que el atacante haya configurado.

La recomendado es que este archivo tenga permisos 644 para un usuario determinado.
Iframes ocultos
En ocasiones el ataque puede ser injectar un simple código iframe, que no puede resultar complicado llegar a dar con él dentro del todo el código HTML de nuestra web.

Ésto seguirían cargando en nuestra página contenido que no queremos, enlaces perjudiciales para nuestra página,etc..
¿Cómo detectar malware en tu web?
Si tu página ha sido hackeada o crees que puede contener código sospechoso puedes acceder a Webmaster Tool para obtener más información

o comprobando el status de web con la siguiente aplicación de Google http://www.google.com/safebrowsing/diagnostic?site=pedroventura.com poniendo el nombre de dominio que quieras. Los resultados para mi página son los que aparecen en la siguiente captura.

Sigue los consejos que te indican desde WebMaster Tool, pero básicamente tendrás que “limpiar” todo tu site del código malware. Una vez lo hayas hecho notifica a Google de que tu site ha sido limpiado.
Los problemas de mi página, vienen porque mi blog de WordPress fue atacado por una injección de código que redirigía a una página malintencionada causando graves daños al Posicionamiento y visitas en mi blog.
¿Cómo solucionar o eliminar el malware?
En primer lugar, decirte que si tienes un backup lo restaures porque puede ser complicado o minucioso llegar a “limpiar” todos los archivos.
Tendrás que comprobar todos los archivos donde los permisos no estén asignados correctamente, es decir que los pueda editar cualquier usuario y es casi seguro que el código injectado estará en todos ellos.
Busca al inicio o al final de los archivos por código que tu no has creado, cualquier código que te parezca sospechoso quítalo. En códigos basados en PHP suelen incluir una función eval() seguida de una base64_decode() y una cadena super larga de caracteres, que no es más que un código PHP codificado y que genera la creación de los iframes o el javascript que después redirecciona a otras páginas.
Puedes usar comandos de consola para buscar y reemplazar todo el código que hayas encontrado sospechoso.
También puedes leer este tutorial de Google: https://support.google.com/webmasters/bin/answer.py?hl=es&answer=163634
Consejos si tienes WordPress u otro Open Source
  • Tienes que tener en cuenta si estás usando WordPress, Joomla, Drupal, o cualquier otro Open Source, el código es abierto, tanto para los programadores que colaboran para mejorar la herramiento creando nuevos plugins y temas, así como para los hackers u otra gente que sólo quiere joder! hablando mal. Se dedican a hacer exploits, script para atacar archivos php que tengan algún bug de seguridad, atacar a los servidores de Wordpres, etc.. por lo que siempre nuestro código va a ser vulnerable, es muy importante de que siempre esté actualizado a la última versión.
  • No uses tantos plugins. Sólo instala y mantén los que vayas a usar y que también estén actualizados.
  • Cuida tu contraseña de acceso, actualizala de vez en cuando. 
Otros enlaces de interés:

Tags de búsquedas:
malware,como eliminar facebook hack tools de mi pc,pongo una web y sale otra malware,ok permiteme Eliminar mi pagina,eliminar virus facebook hack tools,imagenes de malware,detectar codigo malicioso en mi web,cómo quitar el código malware de pagina,como eliminar el facebook hack tools,Que antivirus puedo instalarle a una web para que no sea hackeada,joomla hackeado limpiar el malware,detectar inyeccion codigo joomla 2 5,Indica que es un vinculo y como detectarlo en una pagina web,como detectar scripts maliciosos,desinfectar pagina web

viernes, 7 de agosto de 2015

Comprobar si hay enlaces rotos en tu página Web

Los enlaces rotos son uno de los puntos que primero deberíamos tener en cuenta a la hora de optimizar un sitio para elposicionamiento en buscadores. Un enlace roto dificulta a los buscadores la indexación de la página, le dice al buscador que algo anda mal, que tiene poco mantenimiento o que no se actualiza. Tampoco deja muy buena impreisón a los usuarios. Es decir, los enlaces rotos perjudican nuestro posicionamiento web.
Por este motivo es imprescindible comprobar periódicamente todos los enlaces rotos de nuestra web. Existen multitud de herramientas para la comprobación de enlaces rotos, tanto herramientas online como pequeños programas para descargar. Algunos de los más interesantes son:
Herramientas online para comprobar enlaces rotos
  • W3C Link Checker – Probablemente el primer recurso que deberíamos utilizar. Además de comprobar si los enlaces están rotos nos recomienda, primero, validar nuestro código HTML. Nos indica el tipo de error y una posible solución para cada URL del sitio. También es muy útil que ponga el enlace directo de la página en donde está el error y la línea de código donde aparece.
  • Broken Link Checker – Otra herramienta más de las muchas que existen.
  • La Webera – Para revisar los enlaces rotos de cada página de tu web.
Software para comprobar enlaces rotos
  • Xenu – Pequeño programa de descarga libre que hace una lista de los enlaces que ha encontrado en tu web y marca en rojo los conflictivos. Se hecha de menos la URL directa a la página del enlace roto. Al acabar hace un informa que puedes guardar. Seguramente el programa más utilizado para comprobar enlaces rotos.
  • LinkChecker – Software open source con licencia GPL. Te da la opción de filtrar determinadas URL, añadir URL con clave de acceso, robots.txt… además de organizar los mensajes por colores y con una interfaz clara.
Seguro que hay muchas más herramientas para comprobar enlaces rotosinteresantes. Si tienes una web grande puede tardar su tiempo. Es recomendable que, por lo menos una vez al mes, hagas una comprobación y arregles el desastre. Es impresionante la cantidad de URL que vas a encontrar en mal estado por mucho cuidado que tengas.

Generar URLs amigables con htacces

Las URLs amigables son más fáciles de usar y de recordar por los usuarios y también son mejores para el posicionamiento en buscadores. Además describen mucho mejor los enlaces dentro de una página web y añade un mayor nivel de profesionalidad a nuestras webs.
De todas formas, cuando hemos creado una página dinámica en PHP lo normal es que tengamos URL no amigables. ¿Cómo las convertimos en amigables de manera automática? Una manera de hacerlo es con un archivo.htaccess y gracias a Apache y su mod_rewrite.
mod_rewrite es un módulo de Apache que permite manipular en el servidor las URLs solicitadas. Es decir, cuando llega al servidor la solicitud de una URL, esta se comprueba con respecto a una serie de reglas creadas con Expresiones Regulares creadas para detectar un patrón determinado. Si se encuentra ese patrón en el URL y se cumple la condición impuesta por la Expresión Regular se sustituye el patrón por una cadena de texto o por una acción determinada.
En el ejemplo que vamos a ilustrar vamos a tener una lista de usuarios con link a su perfil usando urls amigables.
Como urls no amigables tendremos:
http://www.yourdomain.com/users.php?id=1
Y como url amigable entenderíamos:

http://www.yourdomain.com/juan
Para conseguir este efecto, necesitaremos crear un archivo .htaccess y añadir el siguiente código:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.yourdomain.com
RewriteRule (.*) http://yourdomain.com/$1 [R=301,L]

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ users.php?user=$1
RewriteRule ^([a-zA-Z0-9_-]+)/$ users.php?user=$1

Y modificar los links hacia los perfiles de los usuarios añadiendo la url amigable en vez de la no amigable.

jueves, 6 de agosto de 2015

Crear manualmente un archivo robots.txt


Reglas para hacer manualmente un robots.txt, para que Google y otros buscadores indexen correctamente lo que publicamos y mejorar nuestro posicionamiento. Ventajas y beneficios de usarlo. User-agent de los distintos buscadores y reglas que podemos emplear. Ejemplos prácticos para descargar.
Cada sitio web debe tener un archivo robot.txt, ya sea si sirve paginas estáticas o dinámicas. Debe tenerlo cualquier sitio creado en WordPress o cualquier otra plataforma.

¿En que se usa el archivo robots.txt?

El archivo robots.txt es creado para los bots o arañas de los buscadores. De existir es lo primero que revisan al entrar en cualquier sitio. Indica la estructura del sitio, la ubicación del sitemap.xml y las páginas y directorios que no se deben revisar. No es obligatorio tener uno, solo es necesario si necesitamos restringir contenido de nuestro sitio a los robots de los buscadores. En él especificamos los archivos o directorios que no deben ser rastreados. No obstante puede ser muy importante por varias razones y está demostrado que usar correctamente un archivo robot.txt, contribuye a que mejore nuestro posicionamiento.

¿Para qué usar el archivo robot.txt?

Los principales motivos por los que necesitamos usar un robots.txt en nuestro sitio son los siguientes:
1- Mejorar el ranking del sitio aclarando y facilitándoles a los bots cuáles son los directorios que pueden ser indexados. 1- Impedir el consumo de banda innecesario rastreando archivos auxiliares del sitio. 3- Impedir que se indexen archivos personales o con contenido privado. Pueden ser documentos, imágenes, fotos u otros archivos que no deseamos que aparezcan accidentalmente en los resultados de las búsquedas. 4- Impedir que seamos perjudicados por los buscadores al indexar contenido duplicado (principalmente en WordPress). En WordPress se generan de forma automática muchas páginas que tienen el mismo contenido, como son las páginas de categorías.

Como crear manualmente un archivo robots.txt para un sitio web

Hay varios servicios de internet que permiten crear un archivo robots.txt. No obstante al ser tan fácil y elemental su creación, podemos hacerlo nosotros mismos manualmente y de esa forma evitar cualquiera equivocación que pueda ser funesta para el posicionamiento de nuestro sitio. Más adelante sí podemos comprobarlo en la web. Un archivo robots.txt es un sencillo archivo de texto plano que se puede crear con el Blog de notas o cualquier otro editor de texto. Solo crea en el escritorio un nuevo archivo de texto y renómbralo a: robots.txt (sin mayúsculas) Puede tener varias líneas, pero usa solo tres reglas:
User-agent: - Se indica que lo que va a continuación va dirigido a un robot en particular o a todos.
Disallow: - La dirección URL de una carpeta o archivo que necesitamos bloquear.
Allow: - La dirección URL de una carpeta o archivo que permitimos su rastreo, aunque se encuentre en el interior de un directorio bloqueado.
Se pueden incluir varias líneas Disallow y varios User-agents en un mismo archivo. Solo sigue las siguientes reglas:
- Para bloquear una carpeta y todo su contenido, inserta una barra inclinada después del nombre del mismo. - Para bloquear una página específica, insértala después de la línea Disallow. - Antes de cada User-agent nuevo deja una línea en blanco. - Entre las distintas reglas (Disallow) no debe existir ninguna línea en blanco.

Ejemplo 1

En este caso la directiva va dirigida a todos los robots y se indica que la carpeta de nombre archivos1 y todo su contenido no se debe rastrear.
User-agent: * Disallow: /archivos1/

Ejemplo 2

En este ejemplo el robot de Google no podrá rastrear el contenido de la carpeta "ventas", ni la página "servicios.html" donde anunciamos y vendemos productos de afiliados.
Google usa varios robots:
User-Agent: Googlebot Disallow: /ventas/
 Disallow: servicios.html

➔ Googlebot, rastrea páginas y contenido web.
➔ Googlebot-Image, rastrea imágenes y fotos para Imágenes de Google.
➔ Googlebot-Mobile, contenido para dispositivos móviles.
➔ Mediapartners-Google, es el robot del servicio de AdSense.

Ejemplo 3

De esta forma se impide que se indexen fotografías personales que están en la carpeta "fotos".
User-agent: Googlebot-Image
Disallow: /fotos/

Ejemplo 4

De esta forma se excluyen todos los archivos PDF, donde quiera que se encuentren.
User-agent: *
Disallow: /*.pdf$

Consejos al crear un robots.txt

1- Si usas el servicio de Google AdSense debes permitir el rastreo completo a su robot, comienza el archivo con las siguientes líneas:
2- Si usas diseño adaptable en tu sitio no debes bloquear el acceso al directorio que contiene los archivos de estilo CSS.
3- Siempre ten en cuenta que los robots de los buscadores son sensibles a las mayúsculas y minúsculas.
4- Al final del archivo robots.txt se debe indicar la dirección del archivo sitemap.xml del sitio o de los archivos si son varios.

Como probar el archivo robots.txt creado

Antes de subir el archivo creado al servidor puedes probar su contenido y estructura. Si tu objetivo es Google puedes probar el archivo usando la Herramientas para Webmasters de Google. Haz lo siguiente: • En la barra a la izquierda escoge Rastreo -> URL bloqueadas. • En el cuadro de Análisis de robots.txt pega el contenido del archivo creado. • En el inferior introduce la dirección URL de tu sitio. • Presiona el botón "Probar".

Puedes también emplear la opción de probar con robots o User-agents diferentes de Google. Si no se detectan errores ya puedes subir el archivo a tu servidor.

¿Dónde situar el archivo robots.txt?

El archivo robots.txt debe estar situado en la raíz del servidor web, allí será donde lo busquen los bots. Si se sitúa en otra ubicación no tiene efecto alguno. La carpeta raíz de un servidor se nombra: htdocs o public_html, dependiendo del sistema operativo del servidor. Finalmente la dirección URL del archivo creado debe tener el siguiente formato: http://sitio-web/robots.txt Introdúcela en un navegador y comprueba si se puede acceder correctamente.
Herramienta online para probar un archivo robots.txt Puedes también probar un archivo robots.txt online usando la siguiente herramienta, solo necesitas en el formulario indicar la dirección URL del archivo. Se indica cualquier error existente y se muestran advertencias. Robots.txt Checker

Crear un archivo robots.txt para WordPress

WordPress recomienda crear un archivo robots.txt que tenga la siguiente estructura:
User-agent: *
Disallow: /cgi-bin/
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/plugins/
Disallow: /wp-content/cache/
Disallow: /wp-content/themes/
Disallow: /trackback/
Disallow: /feed/
Disallow: /comments/
Disallow: /category/*/*
Disallow: */trackback/
Disallow: */feed/
Disallow: */comments/
Disallow: /*?
Allow: /wp-content/uploads/
Como se puede comprobar de esa forma se excluyen muchos directorios con archivos del servidor que no es necesario indexar y muchos archivos como las páginas de categorías, que se pueden considerar como contenido duplicado y afectar nuestro posicionamiento. La última línea se usa para que las imágenes puedan ser indexadas correctamente y se muestren en las consultas de las búsquedas. Si en tu caso no lo deseas, solo elimínala.

Otras formas de bloquear páginas o archivos en un sitio web

La cabecera HTTP "X-Robots-Tag" resulta especialmente útil para limitar la indexación de archivos que no sean HTML, como archivos gráficos y otro tipo de documentos. Se puede usar en los sitios que usan Apache incluyendo la directiva en un archivo .htaccess que puede situarse en la raíz del sitio o en un directorio. De esa forma se puede aplicar de forma global el atributo NoFollow a un grupo de páginas o a todo un sitio. Lee como hacerlo: Bloquear páginas o archivos en un sitio web con el .htaccess Lee más información avanzada en Google de otras reglas que se pueden emplear en el archivo robots.txt: Cómo bloquear o eliminar páginas con un archivo robots.txt

miércoles, 5 de agosto de 2015

Especificar la expiración de imágenes en caché

Desde que Google incluyó en su algoritmo la velocidad de carga de la web, activar la caché del navegador sirve para mejorar la velocidad de carga, sobre todo si tus visitantes son recurrentes y, en todo caso, el posicionamiento de tu web.

La caché de imágenes del navegador sirve, como vimos anteriormente, para mejorar el rendimiento de las páginas web, reduciendo el tiempo de carga, el ancho de banda y los costes de alojamiento.

En servidores Apache es muy fácil determinar el tiempo que los archivos deben permanecer en la caché. Tienes que editar el archivo .htaccess del directorio de imágenes y añadir el siguiente código:

<ifmodule mod_expires.c>
 <filesmatch "\.(jpg|JPG|gif|GIF|png|css|ico)$">
 ExpiresActive on
 ExpiresDefault "access plus 7 day"
 </filesmatch>
 </ifmodule>

Este código indica que los archivos de imagen y los archivos css deben caducar a los 7 días. Como las imágenes que utilizamos en el diseño de un sitio web no se cambian a menudo, podemos usar un vencimiento de 30 días o más.

lunes, 3 de agosto de 2015

Creación de Servicios Web con PHP y SOAP

SOAP es un protocolo de intercambio para servicios web basado en XML, sobre el que puedes leer en esta entrada de la wikipedia. Para no liarnos con preámbulos, vamos al grano ¿cómo creamos un servicio web en PHP?.

Para facilitarnos la vida empezaremos por descargar NuSOAP, un toolkit para el desarrollo de servicios web con SOAP en PHP, que nos proveerá de diversas clases para trabajar con este protocolo. Basta con descargarlo, descomprimirlo, meterlo dentro de nuestro proyecto y, cuando queramos usarlo, incluir nusoap.php como librería.

Con NuSOAP instalado toca crear un servidor SOAP en nuestra aplicación. Para el ejemplo crearemos un servidor, lo llamaremos producto.php, que si recibe una petición donde se le pida una lista de libros devuelva tres títulos (es un ejemplo básico, piensa que en la realiad podrías acceder a una base de datos y dar muchas más funcionalidades).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
    require_once "nusoap.php";
      
        function getProd($categoria) {
        if ($categoria == "libros") {
            return join(",", array(
                "El señor de los anillos",
                "Los límites de la Fundación",
                "The Rails Way"));
        }
        else {
                return "No hay productos de esta categoria";
        }
    }
      
    $server = new soap_server();
    $server->register("getProd");
    $server->service($HTTP_RAW_POST_DATA);
?>


Ok, ahora necesitas un cliente, que llamaremos cliente.php. En el constructor, el cliente recibirá el url del servidor y para acceder al método que nos devuelve los libros recurriremos al método call(), al cual le pasaremos el nombre del método del servidor al que queremos acceder y los parámetros en forma de array. Además, también controlaremos que no haya errores en la comunicación.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
    require_once "nusoap.php";
    $cliente = new nusoap_client("http://localhost/producto.php");
      
    $error = $cliente->getError();
    if ($error) {
        echo "<h2>Constructor error</h2><pre>" . $error . "</pre>";
    }
      
    $result = $cliente->call("getProd", array("categoria" => "libros"));
      
    if ($cliente->fault) {
        echo "<h2>Fault</h2><pre>";
        print_r($result);
        echo "</pre>";
    }
    else {
        $error = $cliente->getError();
        if ($error) {
            echo "<h2>Error</h2><pre>" . $error . "</pre>";
        }
        else {
            echo "<h2>Libros</h2><pre>";
            echo $result;
            echo "</pre>";
        }
    }
?>

Con esto ya tienes una idea múy básica del funcionamiento de un webservice SOAP construído con PHP. Pero claro, nos falta un archivo WSDL para tener un webservice decente. Aunque dicho archivo puede ser escrito a mano, NuSOAP puede generarlo por ti pasándole ciertos parámetros, por lo que lo ideal sería generarlo en el servidor. Así que modifica tu producto.php para que quede tal que así:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
    require_once "nusoap.php";
      
    function getProd($categoria) {
        if ($categoria == "libros") {
            return join(",", array(
                "El señor de los anillos",
                "Los límites de la Fundación",
                "The Rails Way"));
        }
        else {
            return "No hay productos de esta categoria";
        }
    }
      
    $server = new soap_server();
    $server->configureWSDL("producto", "urn:producto");
      
    $server->register("getProd",
        array("categoria" => "xsd:string"),
        array("return" => "xsd:string"),
        "urn:producto",
        "urn:producto#getProd",
        "rpc",
        "encoded",
        "Nos da una lista de productos de cada categoría");
      
    $server->service($HTTP_RAW_POST_DATA);
?>

Como ves, el cambio en es cuando llamamos a register, ya que en vez de pasarle, como antes, el método en cuestión, le añadimos también varios argumentos para generar el WSDL:
  • El primer array nos permite definir el argumento de entrada y su tipo de datos
  • El segundo define la función de retorno y su tipo de datos
  • urn:producto es la definición del namespace
  • urn:producto#getProd es donde definimos la acción SOAP
  • Luego viene el tipo de llamada,que puede ser rpc, como en el ejemplo, o document
  • Tras esto definimos el valor del atribute use, que puede ser encoded o literal
  • Finalmente viene una descripción de qué hace el método al que llamamos
Ahora basta con que en el navegador accedas a producto.php?wsdl y verás el WSDL generado. Ya puedes copiarlo y añadirlo a tu directorio web (crea un archivo y llámalo, por ejemplo, libros.wsdl). Para que el cliente lo utilice debes modificar el código, y en el constructor, en vez del url le pasas el nombre del archivo, de forma que quede como en el ejemplo:

1
$client = new nusoap_client("libros.wsdl", true);

Ahora sí, ya tienes montado un pequeño servicio web. El ejemplo es simplón, pero piensa en todas las funcionalidades que podrías incorporarle.