El blog de SaToNiO

30May/140

La verdad sobre la venta de Ronalds Freimanis

Todo comenzó una calurosa tarde de verano, de un día a mediados de enero. Stronker subió a primera, y con él Pahapill, una bestia capaz de generar desprecio hasta en equipos que no corren en su división. Pahapill era un coloso joven y capaz de ganar en etapas de montaña-colinas, hacerlo bien en algunas generales y tal.

Así, un odio visceral comenzó a fraguarse, comenzando desde gente como Palmeiras, Mexi y otra gente como yo. Los cuatro (yo cuento por dos) comentábamos todos los días algo sobre Pahapill, a espaldas de nortek que debía ser mantenido al margen con extremo cuidado, pues una sola palabra suya a Oska podía hundir todo el plan, y visto que Mexi está enamorado de él... Pues siempre estabamos con problemas.

Un día stronker ganó una etapa, y luego hizo un segundo puesto. Nuestra bilis salía por la boca y decidimos actuar. El 30 de febrero de 2014 nos reunimos en el Hotel Palace de Madrid, con Palmeiras habíendose dejado una pasta importante en el avión desde Brasil y decidimos dar un golpe de CFF, acabando con el reinado del terror de Pahapill. El siguiente extracto es parte de la conversación real que tengo grabada con el móvil:

-Sato: Maldito stronker, hay que prenderle fuego y quemar a sus mujeres.
-Mexi: No hombre, no, que de eso seguro que no tiene.
-Palmeiras: Deixaos de tontaerias que aen este pais tenheis muita suerte de poder tener buenas bicis sin que venga cualqueira i las robe per la calle.
-Sato: Es verdad, pero a ver, centrémonos en el tema, cómo destruimos a Pahapill.
-Palmeiras: Io creo que lo millor es buscar unas favelas y falar con los lideres locales ofrexiendo un sacrificio para que nos ayuden.
-Sato: No nos líes, Palmeiras, que no me jodas, vaya ideas que tienes.
-Palmeiras: en mi pais isto es moi normal.
-Sato: A ver, gentuza, no nos desviemos. Propongo lo siguiente: Uno de nosotros ahorra todo lo que pueda, y después le compra un corredor a stronker al máximo precio que pueda. Con un poco de suerte alguien dirá que éramos amigos y que era un favor y lo echan.
-Mexi: No lo van a echar, solo le quitarán el dinero. Si no ha hecho nada no le van a banear.
-Sato: Ya se verá. ¡Por la libertad!

Y así fue avanzando la noche. Y yo, con la idea clara de que enviar a Oska un jamón para que estuviera de nuestro lado cuando los problemas llegaran, empecé a ahorrar también para el jamón.

Mexi estuvo a punto de echarlo a perder cuando llamó borracho a nrtk.

Entonces había que elegir un cabeza de turco, y entre los 3, por consenso, me elegimos a mi, así que, con mucho pesar, solo me quedó seguir adelante. Ahí empecé a reunir el dinero que pude para llevar a cabo nuestro gran plan.

Dos horas después apareció nrtk en madrid todo celoso, y se llevó a Mexi a su habitación. Palmeiras y yo temimos lo peor, pero el secreto se mantuvo y el plan continuó por su estrecho y difícil camino.

Unos días después, Palmeiras continuó su viaje, y llegó a Ucrania, donde empezó a agitar a las masas contra Pahapill. Ellos pensaron que era contra su presidente y esto desembocó en un Golpe de Estado. La situación se nos fue de las manos y tuvimos que pensar en otras estrategias. Palmeiras salió de allí cavando un túnel con una cuchara en la frontera que está más cercana a Chernobyl.

Con la sombra de la derrota sobre nosotros, Mexi tomó la iniciativa y fue a hablar con Pablo Iglesias y le convenció para presentarse a las elecciones europeas para apoyar nuestra posición ante posibles cambios legislativos europeos que nos pudieran afectar debido a este asunto.

Así llegamos a estas fechas, con Pablo Iglesias ya elegido eurodiputado y con todo a favor para llevar a cabo el plan, salvo el tema de enviar el jamón a Oska. Nos reunimos en una conversación en el Whatsapp y decidimos ponernos en marcha.

El resto ya lo conocéis, el tema de Crimea y todo eso, y también el fichaje.

Así que esto es todo. En resumen, la versión que di ayer de que había sido mi hermano quien había hecho la oferta es falsa, y no ha habido absolutamente ningún hackeo.

Filed under: Juegos online No Comments
13Apr/116

Subida de archivos segura con PHP

El otro día vi un buen artículo sobre cómo programar una subida de archivos de forma que no entrañe riesgos sobre la seguridad de la página web. Y voy a pasar a traducirlo con un bonito añadido al final.

Supongo que no está muy bien traducido, pero tampoco quiero dedicarle mucho más tiempo a mejorarlo así que si alguien quiere que cambie alguna parte, puede poner un comentario con su sugerencia.

Los blockquotes entre comienzo y fin indican comentarios mios y no algo del original.

Comienzo:

La subida de ficheros a nuestro sitio web es una tarea muy común últimamente. Normalmente querremos dejar a los usuarios subir imágenes o ficheros comprimidos con zip. Sin embargo, nunca querremos dejarles subir ficheros .php, .exe u otros scripts. Estoy seguro de que eres como yo, a quien le gustaría que su sistema de gestión de subidas de ficheros es suficientemente seguro para prevenir ataques. En este artículo voy a intentar listar las formas más seguras de proteger tu servidor y tu negocio de esta amenaza potencial. Por otro lado, siéntete libre de compartir tu experiencia con los lectores y conmigo sobre los consejos de seguridad que tengas.

Verificación del content-type

Comprobar el content-type de un fichero es el primer nivel de verificación que muchos de nosotros haremos.

<?php
// la forma más fácil de verificar que es una imagen
if(!eregi('image/', $_FILES['hpt_files']['type']))
{
    echo 'Please upload a valid file!';
    exit(0);
}
?>

Sin embargo, esto es algo que puede ser fácilmente sobrepasado por un atacante cambiando el header content-type que buscaremos después. No obstante, es algo que siempre debemos comprobar. Ten en cuenta que distintos tipos MIME podrían ser distintos en distintos navegadores.

Verificación del contenido de la imagen

Subir una imagen es algo que la mayoría de las aplicaciones permitirán. Un atacante puede cambiar el Content-Type para ser uno válido para que tu script acepte el fichero, así que nos tendremos que asegurar de que es realmente una imagen usando getimagesize() en PHP.

<?php
$imageinfo = getimagesize($_FILES['uploadfile']['tmp_name']);
if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && isset($imageinfo))
{
    echo 'Sorry, we only accept GIF and JPEG images\n';
    exit(0);
}
?>

Podrías querer comprobar también otra información. Sin embargo, un archivo puede ser al mismo tiempo una imagen válida y un script php. La mayoría de los formatos de imagen permiten comentarios de texto. ¿Cómo? tomando una imagen .jpg y subiéndola con extensión php. Cuando getimagesize la mira, ve una imagen, pero cuando el intérprete de php la mira, ejecutará comentario en php y descartará el resto como "basura binaria". Así que getimagesize da sólo un cierto nivel de verificación mientras tenemos que hacer mucho más para proteger completamente nuestro script.

Si alguien quiere más información sobre este tema, puede mirar uno dos

Comprobar la extensión del fichero

Esto es algo que todo gestor de subidas en php debe hacer. Un atacante puede falsear el content-type de un fichero al servidor, la extensión debe ser una válida para que la máquina de PHP lo interprete correctamente. Aunque esto no definitivo, es una comprobación importante. He incluido una lista blanca y otra negra en el código aunque sólo una de ellas es requerida normalmente porque no sabemos qué ocurrirá con la configuración del servidor especialmente en un servidor de alojamiento compartido.

<?php
$filename = strtolower($_FILES['uploadfile']['name']);
$whitelist = array('jpg', 'png', 'gif', 'jpeg'); //example of white list
$backlist = array('php', 'php3', 'php4', 'phtml','exe'); //example of black list
if(!in_array(end(explode('.', $fileName)), $whitelist))
{
    echo 'Invalid file type';
    exit(0);
}
if(in_array(end(explode('.', $fileName)), $backlist))
{
    echo 'Invalid file type';
    exit(0);
}
?>

De esta forma aunque el atacante cambie el content-type, no será capaz de cambiar el hecho de que se necesita otra extensión para que el intérprete de PHP ejecute el código. Sin embargo, que extensiones serán ejecutadas como código php dependerá de la configuración del servidor. Un desarrollador no tendrá conocimiento o control sobre la configuración del servidor. Algunas aplicaciones requieren que los ficheros con extensión gif o jpg sean interpretados por php así que cualquier comentario en la imagen sería ejecutado como código php.

Básicamente, no podemos garantizar que conociendo las extensiones que están siendo interpretadas por PHP eliminará todos los ataques. Además la configuración podría cambiar en algún momento en el futuro cuando se instale otra aplicación en el servidor.

La carpeta de subida

Queremos prevenir que los usuarios ejecuten los ficheros subidos directamente. Esto significa que el mejor sitio para tener esos ficheros es fuera del "web root" (www, public_html, etc) o creando un directorio en él pero restringiendo el acceso a él en la configuración del apache o en el archivo .htaccess. Si el atacante es capaz de subir algo peligroso a tu sistema, esto impedirá que lo ejecute y pueda meter arbitrariamente código en el sistema porque es incapaz de acceder al lugar. Considera el siguiente ejemplo,

<?php
$upload_dir = '/var/domainame/uploads/'; // Outside of web root
$upload_file = $uploaddir . basename($_FILES['uploadfile']['name']);
if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $uploadfile))
{
    echo 'Upload Successfully.';
    exit(0);
}
else
{
    echo 'Upload Fail';
    exit(0);
}
?>

Esto es algo bueno pero ahora el servidor web no será capaz de leer tampoco el directorio. Así que tenemos que utilizar otro fichero para que el servidor web pueda acceder y mostrar el fichero si es necesario.

<?php
$upload_dir = '/var/domainame/uploads/'; // Outside of web root
$name = $_GET['name'];
readfile($uploaddir.$name);
?>

Ahora, el usuario y el sistema serán capaces de acceder al directorio conociendo el nombre del fichero. Sin embargo, el código anterior tiene una vulnerabilidad transversal que un usuario malintencionado podría user para leer cualquier fichero legible en el sistema. Considera el siguiente ejemplo,

http://www.example.com/readfile.php?name=../secret/passwd

Esto lo más seguro es que devuelva la contraseña almacenada en el servidor. Así que siempre acuérdate de hacer seguros los POST y GET en tus scripts PHP.

El método PUT de ISS

Si estás utilizando php en Microsoft ISS, tienes que tener cuidado en tus carpetas web en las que se puede escribir. En contraposición con Apache, Microsoft ISS soporta el método PUT, que permite a los usuarios subir ficheros directamente, sin utilizar una página de subida de PHP. Sin embargo, las peticiones PUT sólo pueden ser usadas para subir ficheros a un directorio si el sistema de permisos del sistema de ficheros lo permite y los permisos de ISS también.

Para prevenir esto, tenemos que asegurarnos de que los permisos de ISS no nos permiten escritura aunque tendremos que permitirla en el directorio para poder subir archivos con un script PHP. Esto hará que una de las dos condiciones falle y esto deshabilitará PUT, que no comprobará todas las cosas que nosotros comprobaremos en nuestro script PHP y pondrá el fichero directamente en el directorio.

La función include

Esto es válido también para require, require_once e include_once, y supongo que habrá más.

En algunos scripts tenemos tendencia a utilizar un valor recibido de los usuarios para determinar qué fichero incluir en un script de php. Esto normalmente no es una buena idea puesto que el atacante podría ejecutar un fichero en el servidor. Considera el siguiente ejemplo,

<?php
// ... some code here
if(isset($_COOKIE['lang']))
    $lang = $_COOKIE['lang'];
elseif (isset($_GET['lang']))
    $lang = $_GET['lang'];
elseif (isset($_GET['lang']))
    $lang = $_GET['lang'];
else
    $lang = 'english';
 
include('language/$lang.php');
// ... some more code here
?>

Asumiendo que ningún filtrado se ha hecho en los datos recibidos, determinamos el idioma y incluimos el fichero de idioma lo que es un código común para algunos de vosotros. Un atacante podría utilizar esta brecha y utilizar una dirección para ejecutar un determinado fichero en el sistema, así que es importante hacer segura tu subida de archivos para impedir que un atacante pudiera ejecutar algún fichero que pudiera ser peligroso para tu sistema (imagina que son capaces de subir un shell o ejecutar un comando y activarlo por la URL).

Nombre de fichero aleatorio

Hablamos sobre cómo un nombre de fichero no debe ser accedido directamente por los usuarios para prevenir la ejecución de alguna forma de ataque. sin embargo, podemos todavía acceder a esos ficheros indirectamente con la ayuda de otro script. Pero si el ataque no conoce el nombre del fichero que ha subido, podría no ser capaz de ejecutar ese código arbitrario en tu servidor web. Así que es una buena idea renombrar tus ficheros con md5 u otro algoritmo de encriptación. Considera el siguiente ejemplo,

<?php
$filename = $_FILES[$uploadfile]['name'];
$save_path = '/var/domainame/uploads/'; // Outside of web root
$extension = end(explode('.', $filename)); // extension of the file
$renamed = md5($filename. time());      // rename of the file
if (!@move_uploaded_file($_FILES[$uploadfile]['tmp_name'], $save_path.$renamed. $extension))
{
    echo 'File could not be saved.';
    exit(0);
}
?>

Sin embargo, si la subida es hecha por ti mismo con una función, renombrar estos ficheros podría no ser bueno para los intereses SEO. Así que esta medida de seguridad es para las funciones de subida que permiten a los visitantes o usuarios externos subir ciertos ficheros en tu servidor web (basicamente no confias en otros que no seas tú mismo).

Disable Script Execution

También puedes intentar desactivar la ejecución de scripts en la carpeta en la que irán tus ficheros. Puedes hacer esto escribiendo un .htaccess en la carpeta.
You can also try to disabled script execution on the uploaded folder where all the files go. You can do this by writing a .htacess file on the folder.

AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi
Options -ExecCGI

Esto te da una capa extra de protección. También puedes restringir que un fichero sea colocado en la carpeta y solamente permitir determinados ficheros en la carpeta. Pero recuerda que si alguna aplicación permite que tu lista blanca sea ejecutada por PHP, las posibilidades de esta protección podrían no ser muy útiles. Sin embargo, todavía sirve como una de muchas capas de protección en tu servidor.

Restringir el tamaño de los ficheros

Aunque no todos los navegadores lo soporten, algunos sí lo hacen. Esto puede dar un cierto grado de protección contra las restricciones de subida.


Debemos también restringir la subida de ficheros en php para impedir que un fichero demasiado largo cause daño a nuestro servidor (cualquier ataque puede producir un grave daño de todas formas). Comprobar el tamaño del fichero puede ayudar a miminizar la cantidad de disco que se necesita para el servidor.

<?php
//check for appropriate size with php.ini
$POST_MAX_SIZE = ini_get('post_max_size');
$mul = substr($POST_MAX_SIZE, -1);
$mul = ($mul == 'M' ? 1048576 : ($mul == 'K' ? 1024 : ($mul == 'G' ? 1073741824 : 1)));
if ($_SERVER['CONTENT_LENGTH'] > $mul*(int)$POST_MAX_SIZE && $POST_MAX_SIZE) $error = true;
$max_file_size_in_bytes = 2147483647;               // 2GB in bytes
if(!$error)
{
    //restrict the limit
    $file_size = @filesize($_FILES[$upload_name]['tmp_name']);
    if (!$file_size || $file_size > $max_file_size_in_bytes) {
        HandleError('File exceeds the maximum allowed size');
        exit(0);
    }
}
else
{
    HandleError('File exceeds the maximum allowed size in php.ini');
    exit(0);
}
?>

Puedes visitar la página de manejo de subidas en PHP para más información.

Limitar la subida de ficheros

Los ataques DOS (Denegación del servicio) podrían ser una de las preocupaciones que tengas. Los usuarios podrían ser capaces de subir un montón de ficheros grandes y consumir todo el espacio en disco disponible impidiendo que otros usuarios usaran el servicio. Así que debemos imponer alguna restricción para impedir que ocurran estos casos. El diseñador de la aplicación podría querer implementar un límite en el número de ficheros y su tamaño que un usuario puede subir en un determinado periodo de tiempo.

Almacenamiento BLOB

Una alternativa a guardar ficheros en el sistema de ficheros es guardar sus datos directamente en la base de datos como BLOB. Este método tiene la ventaja de que todo lo relacionado con la aplicación se guarda bajo el directorio principal o en la base de datos. Sin embargo esto no será probablemente una buena opción si los ficheros son grandes o si la velocidad es algo crítico.

Comprobar la sesión

Podrías querer imponer una cierta medida de seguridad teniendo una sesión entre el formulario de subida del fichero y el gestor de subidas para asegurarte de que el usuario está identificado para proceder con la subida.

Verificar la subida

Debemos también comprobar que de hecho hay un fichero para ser subido al servidor para utilizar el script gestor de subidas.

<?php
if (!isset($_FILES[$upload_name])) {
    echo 'No upload found in \$_FILES for ' . $upload_name;
    exit(0);
} else if (isset($_FILES[$upload_name]['error']) && $_FILES[$upload_name]['error'] != 0) {
    echo $uploadErrors[$_FILES[$upload_name]['error']];
    exit(0);
} else if (!isset($_FILES[$upload_name]['tmp_name']) || !@is_uploaded_file($_FILES[$upload_name]['tmp_name'])) {
    echo 'Upload failed is_uploaded_file test.';
    exit(0);
} else if (!isset($_FILES[$upload_name]['name'])) {
    echo 'File has no name.';
    exit(0);
}
?>

El anterior es un ejemplo de verificar si hay un fichero subido y si es seguro para proceder con el fichero que el usuario ha subido.

Subir un fichero en www

¿No quieres que tu carpeta esté fuera de www o public_html? Hay otra solución para esto. Sin embargo podrías necesitar un servidor dedicado o un vps al que tengas acceso a root para que funcione. En vez de dar permisos al usuario, se los damos al apache en su lugar. Puedes hacer esto con chown al directorio escribible a apache o nobody y asignar permisos 700.

Básicamente, esto deshabilitará el acceso público del fichero en el directorio. Los usuarios externos no serán capaces de ejecutar, escribir o leer en el directorio, sólo apache está permitido ya que es el dueño del fichero.

Diría que esto va a causar más problemas que soluciones. Dar permisos a www-data o similares para cambiar los archivos hará que cualquiera que pueda ejecutar algo con el servidor apache pueda leerlos también. PHP trata de resolver este problema con safe_mode pero si está habilitado un módulo de perl o algo similar vamos a tener los mismos problemas y nuestros amigos que comparten el hosting serán capaces de leer nuestras contraseñas de acceso a la base de datos en texto plano etc.

Creo que la mejor manera de solucionar esto es con la utilización de un suPHP o suexec, pero tiene que ser el hosting el que lo ponga.

De todas formas, esto es otro tema, y supongo que podría dar mucho más que hablar. Aquí nos centramos en la subida de ficheros y creo que esto está un poco fuera del tema.

Mi gestor de subidas de ficheros

Este es el gestor en el que suelo confiar en el que podríais estar interesados.

<?php
    //check for session
    if (isset($_POST['PHPSESSID']))
        session_id($_POST['PHPSESSID']);
    else if (isset($_GET['PHPSESSID']))
        session_id($_GET['PHPSESSID']);
    else
    {
        HandleError('No Session was found.');
    }
    session_start();
// Check post_max_size (http://us3.php.net/manual/en/features.file-upload.php#73762)
    $POST_MAX_SIZE = ini_get('post_max_size');
    $unit = strtoupper(substr($POST_MAX_SIZE, -1));
    $multiplier = ($unit == 'M' ? 1048576 : ($unit == 'K' ? 1024 : ($unit == 'G' ? 1073741824 : 1)));
 
    if ((int)$_SERVER['CONTENT_LENGTH'] > $multiplier*(int)$POST_MAX_SIZE && $POST_MAX_SIZE)
        HandleError('POST exceeded maximum allowed size.');
 
// Settings
    $save_path = getcwd() . '/uploads/';                // The path were we will save the file (getcwd() may not be reliable and should be tested in your environment)
    $upload_name = 'Filedata';                          // change this accordingly
    $max_file_size_in_bytes = 2147483647;               // 2GB in bytes
    $whitelist = array('jpg', 'png', 'gif', 'jpeg');    // Allowed file extensions
    $backlist = array('php', 'php3', 'php4', 'phtml','exe'); // Restrict file extensions
    $valid_chars_regex = 'A-Za-z0-9_-\s ';// Characters allowed in the file name (in a Regular Expression format)
 
// Other variables
    $MAX_FILENAME_LENGTH = 260;
    $file_name = '';
    $file_extension = '';
    $uploadErrors = array(
        0=>'There is no error, the file uploaded with success',
        1=>'The uploaded file exceeds the upload_max_filesize directive in php.ini',
        2=>'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form',
        3=>'The uploaded file was only partially uploaded',
        4=>'No file was uploaded',
        6=>'Missing a temporary folder'
    );
 
// Validate the upload
    if (!isset($_FILES[$upload_name]))
        HandleError('No upload found in \$_FILES for ' . $upload_name);
    else if (isset($_FILES[$upload_name]['error']) && $_FILES[$upload_name]['error'] != 0)
        HandleError($uploadErrors[$_FILES[$upload_name]['error']]);
    else if (!isset($_FILES[$upload_name]['tmp_name']) || !@is_uploaded_file($_FILES[$upload_name]['tmp_name']))
        HandleError('Upload failed is_uploaded_file test.');
    else if (!isset($_FILES[$upload_name]['name']))
        HandleError('File has no name.');
 
// Validate the file size (Warning: the largest files supported by this code is 2GB)
    $file_size = @filesize($_FILES[$upload_name]['tmp_name']);
    if (!$file_size || $file_size > $max_file_size_in_bytes)
        HandleError('File exceeds the maximum allowed size');
 
    if ($file_size <= 0)
        HandleError('File size outside allowed lower bound');
// Validate its a MIME Images (Take note that not all MIME is the same across different browser, especially when its zip file)
    if(!eregi('image/', $_FILES[$upload_name]['type']))
        HandleError('Please upload a valid file!');
 
// Validate that it is an image
    $imageinfo = getimagesize($_FILES[$upload_name]['tmp_name']);
    if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg' && $imageinfo['mime'] != 'image/png' && isset($imageinfo))
        HandleError('Sorry, we only accept GIF and JPEG images');
 
// Validate file name (for our purposes we'll just remove invalid characters)
    $file_name = preg_replace('/[^'.$valid_chars_regex.']|\.+$/i', '', strtolower(basename($_FILES[$upload_name]['name'])));
    if (strlen($file_name) == 0 || strlen($file_name) > $MAX_FILENAME_LENGTH)
        HandleError('Invalid file name');
 
// Validate that we won't over-write an existing file
    if (file_exists($save_path . $file_name))
        HandleError('File with this name already exists');
 
// Validate file extension
    if(!in_array(end(explode('.', $file_name)), $whitelist))
        HandleError('Invalid file extension');
    if(in_array(end(explode('.', $file_name)), $backlist))
        HandleError('Invalid file extension');
// Rename the file to be saved
    $file_name = md5($file_name. time());
 
// Verify! Upload the file
    if (!@move_uploaded_file($_FILES[$upload_name]['tmp_name'], $save_path.$file_name)) {
        HandleError('File could not be saved.');
    }
    exit(0);
 
/* Handles the error output. */
function HandleError($message) {
    echo $message;
    exit(0);
}
?>

Conclusión

Esto no es una solución a toda prueba para tus subidas de archivos. Sin embargo, puede ser utilizado como referencia y también discutir sobre cómo mejorar la seguridad general de nuestras aplicaciones web hoy en día.

Fin

La nueva vulnerabilidad

Bueno, ahora que hemos llegado al fin del artículo traducido, comentaré que en el afán de asegurar las subidas de ficheros, ha introducido una nueva vulnerabilidad.

Si en otro punto de la aplicación utilizamos sesiones para identificación o algún otro tipo de tarea importante, podría ser útil para un atacante fijar la sesión a un valor conocido, y posteriormente usarlo.

Ejemplo: un foro en el que se usen sesiones (casi seguro que hay formas más fáciles de atacarlo dependiendo de la página y la situación).
Eres el atacante y tienes un blog por ejemplo, y conoces a la víctima. Colocas cierto código en la página, que abra la página de subida de ficheros una vez para fijar la sesión, y si hay una función de recuérdame, a alguna de las páginas que lo implementan. La sesión se habrá fijado a un valor conocido que nosotros hemos determinado (por ejemplo entrando nosotros y obteniendo el valor de las cookies), y en el caso de haber una función de recuérdame, también estará identificada con el nuevo usuario. Si la página no hace complejos chequeos entre los que se incluye que IP no varía (este es tal vez el menos complejo), podríamos simplemente entrar en la página web con esa sesion que nosotros habíamos generado identificados con las credenciales de nuestro visitante.

Si no existe función de recuérdame, entonces aún podríamos poner un enlace todo en plan poniendo que importante es que abras esto, entrarán, verán que no están identificados y se identificarán. Si no hay mucha protección extra estaremos dentro también cuando lo hagan.

Más información sobre esto último

4Oct/104

El maltrato al césped

Es una verdadera vergüenza que en este país, que llamamos civilizado, se permita semejante maltrato a un ser vivo. El césped de los campos de fútbol es pisoteado por los jugadores de fútbol, creándole un gran trauma que nunca podrá superar. ¿Quién no ha visto césped levantado? ¿No os dio pena? ¿Por qué no podemos ser su amigo y ayudarlo a superar el bache?

Especialmente es probable que el césped de los campos de entrenamiento cree un sindicato para protestar ante los graves maltratos físicos que se producen a diario contra su ser. Pero esto no es lo peor, sed conscientes que cada año millones de personas en todo el mundo plantan semillas para posteriormente mutilar sus tallos, hojas o semillas. ¿Os dais cuenta del daño que ocasiona ésto a todos esos seres vivos? ¿Cómo alguien podría hacer una cosa así?

Otro problema al que se enfrentan nuestras queridas plantas es que los insectos y pájaros las atacan, matando su alma. Y no sólo eso, también roban sus conciencias. Esos bichos del demonio merecen ser exterminados, pero no devorados puesto que su carne es impura y podría causar, como poco, la muerte a quien la comiese.

Es hora de que alguien inicie una secta en la que no se pueda comer ningún organismo eucariota. Ésto nos salvará de la condenación eterna. ¿Quién está conmigo?

Ahora bien... ¡Muerte a las moscas y mosquitos!

3Feb/1010

El “fuera de juego” de Pedrito

Esta entrada viene precedida de una enorme indignación tras ver la manipulación que ha habido sobre este asunto. Manipulación a veces más sutil y otras menos, llegando incluso a manipular imágenes para engañar al lector/espectador. Una manipulación generalizada que nos muestra lo fácil que es contentar a la gente con la información cuando lo que se les muestra el mensaje que quieren recibir, sin importar que no haya absolutamente ninguna razón para hacerlo.

Ya la semana pasada asistimos al espectáculo que organizó la prensa y el Real Madrid por la expulsión de Cristiano Ronaldo, cuestionando la decisión del árbitro con tomas más o menos claras, pero un hecho: un jugador del equipo rival con la nariz rota. Es una decisión del árbitro, que unos estimarán errónea, y otros no. Es algo que se puede entender ya que es subjetivo, aunque no comparto.

Esta vez fueron más allá.

Viendo el partido, en directo, me dio la impresión de que era fuera de juego, aunque tampoco lo vi demasiado bien, y no recuerdo haber visto en ese momento ninguna repetición que dejase esto más o menos claro y yo ya llevaba esa idea preconcebida. La prensa probablemente se dio cuenta y decidió explotarlo. Es aquí cuando mi hermano me dijo que en marca habían puesto una imagen del fuera de juego, que a primera vista parecía claro en la imagen. Hasta que se dio cuenta de que la imagen estaba manipulada.

Veámosla:

Imagen de marca, enlazada directamente en su página

Enlace alternativo, por si la borran

¿Ha sido fuera de juego? A juzgar por la imagen sí. ¿Dónde está la trampa? Esta vez no están las discutidas líneas del fuera de juego (casi todas hechas mal-muy mal, también con la misma intención). Pero sin embargo han borrado las líneas del campo y recortado la imagen para añadir efecto óptico que nos haga pensar que efectivamente estaba en posición ilegal.

Pues bien, ahora analicemos otra imagen, esta vez, de as.com:

Que voy además a subir yo, por si la quitan, dejando este enlace alternativo. En la que si se traza la línea del campo descubriremos que Pedrito arrancó en posición legal. Y vistos los escrúpulos de marca, podrían haberlo hecho más claro eliminando también al último defensor del Sporting, así no habría dudas: hubiera sido un fuera de juego de al menos cinco metros, un fuera de juego para enmarcar, un fuera de juego para pedir la destitución del árbitro y el descenso del Barcelona por compra de partidos.

Imagen con linea blanca

La distancia entre la parte de la pierna que está mas atrás del defensor es mayor que la de la línea a Pedrito, y aunque no fuera así todavía estarían en línea. ¿Dónde está el fuera de juego ahora? No lo hay, pero la mayoría de las grandes cadenas de televisión han dicho que sí lo había, mintiendo a sus espectadores. ¿Para qué? ¿Tan importante es que la gente crea que el barça está siendo favorecido de forma descarada esta liga?. Les debería dar vergüenza, no sólo a ellos sino también a todos los que se inventaron las líneas de fuera de juego, o las pusieron paralelas a la del medio del campo, con la única intención de manipular, cosa que también hizo marca, y en portada. Que te saquen cinco puntos no es razón para tratar de engañar a quien te lea/oiga/vea, tratando por todos los medios de desprestigiar al rival.

Aquí dejo enlace a un video de Cuatro, uno de los pocos medios de comunicación que no cayeron en el engaño y dijeron la verdad.

Cabe destacar que en Gol TV dijeron desde el principio que no fue fuera de juego y lo explicaron también con detalle.

Bien pues la manipulación de los medios no acaba ahí. En el programa que pusieron en La Sexta un rato después de que acabase el partido del Real Madrid contra el Deportivo (con un gran taconazo de Guti, no lo vamos a negar), compararon este fuera de juego de Pedro, que ellos mismos dijeron y aseveraron que existía, con otra jugada contra el Sporting de Gijón, la cual dijeron que el árbitro había anulado por fuera de juego, tratando de hacer que el espectador no viera que lo que realmente hubo fue mano. Me refiero a la jugada del gol anulado al Madrid por mano de Kaká. Unos diez minutos después dijeron que la jugada pudo ser mano y no fuera de juego, pero el daño ya estaba hecho.

Es una pena que no tenga imágenes de esto, pero quien lo quiera ver que lo busque, y si algún lector lo encuentra (difícil porque no tendré ninguno), que ponga un comentario con la dirección y lo añado.

8Aug/070

Ni puto caso

Bueno, ya no uso apenas esto pero hoy voy a escribir un mensaje a modo de concienciación:

Introducción :

¿Os acordáis de finales marzo de este año, con las elecciones? Hice una serie de ataques para que arreglaran un problema potencialmente peligroso en su utilización contra otra gente. Antes de esos ataques, unas dos semanas si no recuerdo mal, habí­a reportado esto, y hací­a al menos una semana que me habí­an dicho que se lo habí­an comunicado a los HTs. Tras los ataques algo tení­an que hacer, y deshabilitaron los logos una semana aproximadamente y alargaron las elecciones un dí­a.

Empieza a leer aquí­ si quieres, que es donde empieza lo interesante

Bien, a dí­a de hoy, aún sigue sin estar totalmente arreglado, dije en su momento que habí­a una forma que se me habí­a ocurrido antes que la de los logos para aprovechar esto, y lo cierto que meses después aún sigue siendo utilizable.

Para probar si se podría utilizar sobre ti he habilitado una página, http://www.satonio.net/prue-ht.php, que como link externo en hattrick, al entrar haciendo click, trata de cambiar el entrenamiento del visitante a General, y muestra la página de hattrick con la que se manda la orden.

Utilizando esto, se podrían ordenar al visitante una ampliación de su estadio dejándolo a cero, la contratación de un nuevo entrenador, el despido de un jugador, la orden de que puje por un jugador concreto una cantidad determinada (sólo conociendo la id del equipo que va a entrar), u otras muchas cosas como borrar una alineación guardada haciendo que el equipo haga WO en un partido determinado, o empezar a contratar entrenadores de porteros a saco.

25Mar/070

Nuevo discurso

Vótame, por la paz en África.

Después de la pésima victoria de España ante Dinamarca el pasado sábado, me presento a seleccionador nacional con un objetivo claro: recuperar el apoyo de los inutiles... digo afición, afición. Quiero recuperar el apoyo de la afición a la seleccion española. Para ello utilizaremos estrategias de otras ramas del espectáculo: que los jugadores se tiren al suelo y rueden como si estuviesen ardiendo nada mas llegar al área, así­ si hay un poco de suerte (y quizás algún soborno, no los descartemos) el árbitro pitará penalty.

¿Qué jugadores utilizar? Evidentemente los que estén más en forma: Raúl González (135579059) y unos pocos más. Evidentemente este jugador es la estrella del equipo y debería ser titular en todos los partidos, no entiendo como el actual seleccionador no lo ha llevado... Es absurdo en sí­ mismo. Los demás jugadores a llevar juegan todos en un equipo bastante desconocido ahi por V, se llama Alcantarilla CF. Como este equipo no tiene suficientes españoles, comprará otros en el mercado, y como nos fiamos absolutamente de su criterio, todos los que este equipo fiche irán a la selección.

Si gano reduciré el paro, edificaré tres rascacielos en forma de aceituna, llevaré la paz a África y destaparé la conspiración secreta que están haciendo los atunes para dominar el mundo en colaboración con los Estados Unidos de América y el gobierno de la Atlántida. Además, ganaré el mundial.

¿Por qué votarme a mi? Porque voy a ganar, es la única forma de conseguir que tu voto sea útil (recordemos que el voto útil es lo más importante del mundo).

Si salgo elegido, os prometo que ganaré las elecciones.

La financiación

Tendreis que pagar todos y cada uno de vosotros bastante dinero para mantener el sistema de sobornos necesarios para ganar partidos, en concreto se podría decir que un 75% del beneficio de vuestros equipos a final de cada temporada, bueno, en realidad mejor que no, porque seguramente será negativo así­ que se podria utilizar el 75% de los ingresos netos por temporada. Sí­, ya sé que eso os va a hundir, pero para lograr la paz para África va a hacer falta mucho mucho dinero, además necesitamos crear un ejército fuerte capaz de entrar en aguas de USA y secuestrar los atunes asesinos. Aquí­ viene otro punto fuerte de mi candidatura, así­ que atención... ¿Cómo crear un ejército fuerte con pocos fondos? Esto es muy sencillo, siguiendo las enseñanzas de Cruyff en frases como:

"Si el equipo contrario tiene un jugador inteligente que se desmarca muy bien, siempre optamos por la solución más sencilla: que no le marque nadie. Si no le marca nadie, no se desmarcará."

Pues nosotros igual, no crearemos el ejército sino que convenceremos a los americanos para que luchen entre sí­ en una guerra civil, estoy convencido de que con ayuda de las ballenas podremos convencer al 95% de la población: Todo el mundo quiere a las ballenas, y son el principal objetivo de la conspiración de los atunes. Llegados a este punto estoy seguro de que hay gente que se está preguntando por qué no mandamos a las ballenas a luchar contra los atunes, ya que son mucho más grandes, ¿no?, pues bien, la respuesta no es sencilla, tenemos que remontarnos al cretácico medio cuando los aliens tuvieron su primera batalla contra los predators. En resumen, las ballenas no pueden atacar a los atunes porque ambas especies hicieron crecer su cultura sobre madera, esto es, encima de un barco. Cuando un pescador pesca un atún o una ballena se vuelven trece veces más inteligentes que un humano, hecho que está demostrado por la Universidad de la Atlántida. Según su último modelo teórico esto pasa porque los electrones, que giran siempre alrededor de la tierra, caen en un pozo de potencial creando un efecto luminoso llamado comunmente bombilla.

Estoy tan convencido de que voy a ganar, que si no gano, dejo HT.

Filed under: Hattrick No Comments
16Dec/060

El equipo ya va lider en la jornada 2

Lider en la jornada 2, dos muy buenos resultados han colocado lider en solitario al equipo (0-6 y 6-0) del grupo de V, aunque el primero de ellos debió ser mas abultado.

Filed under: Hattrick No Comments
4Dec/060

Elecciones sub-20

Tengo aqui el discurso de candidato para las sub-20:

Hola, soy SaToNiO, candidato a seleccionador sub-20

estoy en V y me presento totalmente solo.

Si krash-man os dice que me gano, es mentira, aqui teneis las pruebas que el no aporta:
(41095722)
(41095761)

Ahora paso a describir el proyecto, es muy simple:

el proyecto se centra exclusivamente en fichar a kaka, cesc, robben y wenger

cuando salga elegido, seleccionare a los jugadores que ya estaban en la seleccion, puesto que llegaron bastante lejos y como nuestra seleccion no tiene nivel para mas, ajo y agua

aparte tengo esta prueba del canal #hattrick del IRC-Hispano:

18:54 @suikakuyu ¦ yo tengo 2 delanteros cañon y como ganeis los despido

lo dijo refiriendose a las candidaturas de krash-man con numain y a la mia.

a numain tambien le he ganado en partido oficial como a krash-man, aunque solo una vez (por ser partido de copa en vez de liga): (81075435) asi que no les voteis a ellos, votadme a mi, indecisos de los coj...

si gano, prometo que seleccionare a los siguientes jugadores, ya que tienen mas nombre que los que seleccionaria otra gente, y no miro a nadie ¬¬

Fernando Hierro (127216842)
Albert Luque (140629261)
Fernando Morientes (133226173)
Xabier Alonso (142625884)
David Villa (142653439)
Pablo Aimar (122286058)
Antonio Puerta (130022892)
Rafael Guerrero (128329525)

y despues de eso, me retiraré de hattrick sin hacer la alineacion en un solo partido, por lo que no tendreis que preocuparos mas de mi, atajo de mantas!!!!!! vamos a ganar el mundial!!!!!!!! sieske ya me habeis cabreado

y ahora la parte en la que describo que voy a hacer:

con la base de datos: nada, no pienso mirar nada
animar a los managers a que sigan entrenando los jugadores aunque no vayan a llegar: ni de coña, si quieren perder pasta alla ellos
tactica a usar: solo una, la que venga por defecto
en general: nada

p.d.: voy a vender un portero cm dentro de unas semanas en caso dek no gane las elecciones, lo voy a poner por 2 kilos, si a alguien le interesa k me mande un ht-mail y le aviso cuando lo ponga.
p.d.2: si he ofendido a alguien, lo siento, ATAJO DE MANTAS.

xDDD bueno eso es todo, y recordad, votadme!!!!!! soy el mojo d tos loskhay!!!

Filed under: Hattrick No Comments
4Dec/060

Novedades

En hattrick me mantuve en V, en el f1rem estoy en g2 pensandome si bajar o no.

Voy a presentarme a las elecciones a seleccionador sub-20 de la seleccion española de hattrick.

Filed under: F1rem, Hattrick No Comments
3Aug/060

a V!!!

pues eso, a V!!! y en el f1rem tengo ya 9 puntos.

Filed under: F1rem, Hattrick No Comments