Bromas con PHP – Clonar Web

Si, lo se, este post no es nada serio, pero hay veces que estás conversando con alguien y no puedes evitar dejar correr la mente y hacer alguna tontería. Pues bien, hoy es uno de esos días. De un modo u otro, hoy ha salido el tema de como clonar una página web en nuestro propio servidor, no descargarla y tenerla offline, sino tener una página (una fuente) en php que sea capaz de hacerse pasar por la web clonada. Como la idea es solo hacer un pequeño experimente, pues hemos ido a lo básico, una página de un blog. Para el caso se ha elegido la de SecuritybyDefault (esperemos no se cabreen). Y la verdad es que los resultados han sido bastante mejores de lo esperado. Con solo un par de líneas hemos conseguido hacer un clon de ella. Solo de la página principal, pero si tuviéramos un formulario de registro, la petición se realizaría desde nuestro servidor (da que pensar). El código inicial ha sido algo así:

<? 
$html = file_get_contents('http://www.securitybydefault.com');
echo $html;
?>

Sorprendentemente, teníamos que nuestra página era capaz de reproducir la de securitybydefault a la perfección. Aquí, se ha comentado, que lo que primero suele hacer un usuario cuando accede a una página es navegar por sus links, con lo cual mediante el sistema creado hasta ahora, en cuento el usuario haga click en un enlace, volverá al dominio correcto.

Aquí, como primer experimento, hemos decidido coger una página html con varios enlaces. Por ejemplo, una así:

<html>
<head>
<title>pruebas</title>
</head>
<body>
<a href="www.google.com">Google(EN)</a><br />
<a href="www.google.es">Google(ES)</a><br />
<a href="www.yahoo.es">Yahoo</a><br />
<a href="www.microsoft.es">Microsoft</a><br />
</body>
</html>

Obviamente, si esta página la clonamos con nuestro sistema, en cuanto el usuario haga click en alguno de los enlaces, abandonará nuestro servidor para irse a uno de los correctos  ¿Cual es el problema? Los enlaces, deberíamos cambiar estos para hacer llamadas a nuestro clonador con las nuevas direcciones, así clonar la nueva página solicitada, pero permanecer en nuestro servidor.

Pues dicho, y sorprendentemente hecho.

<?
$url = $_POST['url'];
if(!empty($url)) {
$patternHref = "/href=\"(.*?)\"/is";
$html = file_get_contents($url);
$insertCode = "<script language=\"javascript\" type=\"text/javascript\">
function redirectUrl(destination) {
window.localtion.href = 'cloner.php?url=' + destination; }
</script></head>";
$htmlConstruida = str_replace("</head>", $insertCode, $html);
$matches = array();
preg_match_all($patternHref, $htmlConstruida, $matches);
for($i = 0; $i < count($matches[0]); $i++) {
$htmlConstruida = str_replace($matches[0][$i],
          "href=\"javascript:redirectUrl(" . $matches[1][$i] .");\"",
          $htmlConstruida);
}
echo $htmlConstruida;
}
else
{
?>      
<html><head><title>Cloner v0.1</title></head><body>
<form name="urlCloner" method="POST" action="cloner.php">
Url: <input type="text" name="url" size="60"/>
<input type="submit" value="Submit" />
</form></body></html>
<? } ?>

Como podéis ver lo único que se hace, es a través de expresiones regulares, hacer un par de inserciones y modificaciones en el código de la página que vamos a clonar, algo que no las afecte visualmente, pero si afecte su funcionamiento.

Una de las cosas que se hace es insertar una función javascript (redirectUrl) que llamará a nuestro clonador con una url que reciba. La otra modificación que se hace es la de remplazar los enlaces por llamadas a nuestra función manteniendo las url’s de estos.

De esta forma el ejemplo de página html que hemos visto antes, quedaría de está forma al clonarlo:

<html>
<head>
<title>pruebas</title>
<script language="javascript" type="text/javascript">
function redirectUrl(destination) {
window.localtion.href = 'cloner.php?url=' + destination; }
</script>
</head>
<body>
<a href="javascript:redirectUrl(www.google.com);">Google(EN)</a><br />
<a href="javascript:redirectUrl(www.google.es);">Google(ES)</a><br />
<a href="javascript:redirectUrl(www.yahoo.es);">Yahoo</a><br />
<a href="javascript:redirectUrl(www.microsoft.es);">Microsoft</a><br />
</body>
</html>

Ahora, aunque el usuario navegue por la página, seguirá estando en nuestro servidor sin tener que tener un montón de páginas almacenadas en él.

Como todo esto era un experimento para pasar el rato, y el rato ha pasado, pues aquí nos hemos quedado. Obviamente no creo que funcione en todas las páginas, ni que reconozca todos los enlaces, por ejemplo, aquellos que en vez de comillas dobles sean con comillas simples, solo sirve para navegar por partes públicas de la aplicación, ya que no clona sesiones ni ningún tipo de seguridad, los enlaces al pasar el ratón sobre ellos se ven modificados, etc… pero bueno, aquí lo dejo. Como se suele decir, es un experimento de laboratorio, donde todo esta controlado, no pasa de ser una curiosidad. Cualquiera es libre de coger el código y seguir jugando con él, y por supuesto de comentarlo aquí. Ya sabéis GPL y esas cosas. Nos vemos.

Bromas con PHP – Clonar Web

5 thoughts on “Bromas con PHP – Clonar Web

  1. hola amigo pienso que hoy en dia muchos hacen dinero pues clonando web e insertando link de clikbank que informacion tienes para hacer eso es lo mismo que estas explicando

    Like

    1. svoboda says:

      No es exactamente lo mismo. El post no es más que un pequeño juguete para pasar un par de horas entretenido. Como he comentado, no clona ni seguridad, ni parte privada ni nada similar, sería bastante fácil detectar que es una página fraudulenta. Además, ni mucho menos mi intención es alentar lo que comentas, sobre todo porque clonar una página se puede utilizar no solo para meter links de publicidad y demás, sino para robar credenciales a través de Phishing.

      Like

  2. La clonación de webs es muy jodida, sobre todo cuando lo hacen empresas en el extranjero que se suponen “legales”, y que se dedican a crearle a otros páginas web.

    Mirad: Net&Software: http://www.netandsoftware.es

    y los plagiadores: nadoweb.com

    Desde hace unas horas, se han dignado a quitar algunas fotos que tenían royalties pagados

    Like

    1. svoboda says:

      Efectivamente, lo de clonar webs no es una buena práctica, y sobre todo cuando se hace para lucrarse a costa del desconocimiento de mucha gente. Pero como ya dije con anterioridad, el post no es más que para pasar el rato una tarde aburrida, no serviría para engañar a nadie, no es más que un juguete teórico. Un saludo.

      Like

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.