Categories
PHP Quiz Seguridad

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 IGNORE INTO links (url, title) VALUES ('%s', '%s')"; // ignorar los links repetidos
        $db->query(sprintf($sql, $db->escape($_POST['url']), $db->escape($_POST['title'])));
}

?>

php:

// listar.php
<html>

<head>
        <title>Demo</title>
</head>

<body>

<?php $links = $db->get_results('SELECT url, title FROM links'); ?>

<ul>
<?php foreach ($links as $link) : ?>
        <li><a href="<?php echo $db->escape($link->url); ?>">
                <?php echo $db->escape($link->title); ?></a></li>              
<?php endforeach; ?>
</ul>

</body>

</html>

¿Pueden identificar donde está el error?

Nota: la respuesta al quiz sobre validación de datos, todavía queda pendiente a pedido de Victor.

Categories
PHP Quiz Seguridad XSS

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.

Categories
CSRF Fresqui PHP Utilidades WordPress

Tus Visitantes + Fresqui + WordPress = Posible IPod

Desde que Fresqui -un servicio parecido a Digg o Menéame- anunció que iba a pagar a los usuarios que envíen contenidos de calidad y colaboren con la comunidad de Fresqui, seguramente muchos de los usuarios de ésta se han puesto "las pilas" para participar más.

Categories
PHP Quiz Seguridad XSS

Implicancias de la codificación del documento – Parte 2

¿Qué condiciones se deben dar para que el siguiente código sea vulnerable a XSS?

html:

<html>

<head>
    <title>Test</title>   
</head>

<body>

<?php echo htmlentities($_GET['mensaje'], ENT_COMPAT, 'utf-8'); ?>

</body>

</html>

Nota: la codificación del documento que contiene el código mostrado es UTF-8.

Actualización: Explotar el código mostrado

Se deben cumplir las siguientes condiciones para que la vulnerabilidad se haga evidente:

  • El atacante envía como valor de la variable mensaje un texto en formato UTF-7 u otro.
  • El servidor web donde se aloja la página no envía una codificación por defecto (Ej. que no haya una directiva AddDefaultCharset en Apache)
  • Que el navegador use la misma codificación que el texto enviado. En Firefox se debe cambiar manualmente, con lo cual se complica el ataque, sin embargo, si en Internet Explorer la selección automática de codificación está habilitada, entonces la página que contiene el código ya es vulnerable, caso contrario, estamos en el mismo caso que Firefox.

He puesto el código en http://test.buayacorp.com/xss.php para efectos de prueba (para ver el mensaje, usen IE con la mencionada opción habilitada - Ver->Codificación->Selección Automática).

Solución

Poner de manera explícita la codificación adecuada, a través de cabeceras HTTP o del elemento meta.

Categories
Microsoft PHP Zend

Primeros resultados de la alianza Zend – Microsoft

Hace algunos días Zend y Microsoft, anunciaban

una alianza para mejorar la performance de PHP en Windows 2003 Server y su planeado sucesor, Longhorn Server. Zend optimizaría la instalación de PHP en servidores Windows con cambios enviados su comunidad de desarrolladores.

Hoy, Microsoft anuncia que está disponible para descarga la primera CTP de FastCGI. Por su parte, Zend también anuncia la liberación de una versión especial de PHP 5.2 para esta CTP.

Descargas