Categoría: Quiz
PHP: Uso adecuado de parse_str
Pregunta sobre el uso adecuado de parse_str para evitar ataques XSS y SQL Injection (Inyección de SQL)
WordPress, XSS y CSRF – Parte 2
En la primera parte vimos un poco de los problemas que tiene usar $_SERVER['PHP_SELF'] sin ningún tipo de validación. Para esta segunda parte, he preparado un pequeño quiz que básicamente refleja los problemas reportados en WordPress. La siguiente porción de código es una versión resumida del contenido de los archivos wp-includes/vars.php y wp-includes/functions.php (función wp_nonce_ays): [...]
Ejercicio de la Semana: Visualización de perfiles
Continuando con la serie, pongo otro script para que se diviertan. php:<?php include_once './config.php'; if ( empty($_REQUEST['id']) && empty($_REQUEST['nick']) ) { die('No user selected'); } if ( isset($_REQUEST['nick']) ) { if ( preg_match('/^[a-z0-9]{3,20}$/i', $_REQUEST['nick']) ) { $where = "WHERE nick='" . $bcdb->escape($_REQUEST['nick']) . "'"; } [...]
También publicada en Seguridad
Ejercicio de la Semana: Login de usuarios y actualización de datos
A partir de ahora, cada semana haré el intento de poner los quiz los días lunes o martes, así tendremos más tiempo para comentar estos pequeños ejercicios. Esta vez, se trata de dos páginas: la primera que se encarga de realizar el login de los usuarios y la segunda se encarga de mostrar y actualizar [...]
Un bug interesante en WordPress
El presente quiz está basado en un reciente bug de WordPress que fue corregido en la versión 2.0.6 de este CMS php:<?php header('Content-type: text/plain; charset=utf-8;'); if ( empty($_POST['title']) ) { die('Parámetros no válidos'); } // Conexión a la base de datos test mysql_connect('localhost', 'root', '1234'); mysql_select_db('test'); // Escapar los valores $title [...]
Filtro de datos – Solución
El código mostrado en el último quiz, en realidad es una función de WordPress que era vulnerable a XSS. Pongo la solución en una nueva entrada porque intentaré describir algunos de los errores que cometí al intentar explotar el bug mencionado en una entrada anterior.
También publicada en JavaScript, Seguridad, Web, Wordpress, XSS
Filtro de datos
Volviendo a los quiz: php:<?php function clean_url( $url ) { if ('' == $url) return $url; $url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%]|i', '', $url); $strip = array('%0d', '%0a'); $url = str_replace($strip, '', $url); $url = str_replace(';//', '://', $url); [...]
Validación de datos – Solución
Continuando con la serie, ¿qué cosas se tienen que cumplir para que el siguiente código sea vulnerable a XSS? php:< ?php /* Evitar XSS a través de otros formatos */ header('Content-type: text/html; charset=utf-8;'); $color = '000'; if ( !empty($_GET['color']) ) { $color = htmlentities(strip_tags($_GET['color'])); } ?> <html> <head> [...]
Cuando los filtros no hacen lo que deberían – Parte 2
La siguiente función era utilizada para validar los datos en una aplicación web -es una versión modificada del método que trae ezSQL php:function escape($text) { return mysql_real_escape_string(stripslashes(strip_tags($text)), $this->connection); } Se usaba de la siguiente manera: php: // agregar.php <?php if (!empty($_POST['url']) && !empty($_POST['title'])) { $sql = "INSERT [...]
Cuando los filtros no hacen lo que deberían
El código que se muestra a continuación, es un ejemplo simplificado del comportamiento que ofrece en una de sus secciones, un -importante- diario español.