Categories
PHP Quiz Seguridad

Quiz de la semana sobre PHP

El siguiente código, aparte de mostrar lo mal que programo :), contiene algunos errores graves; en realidad, esta porción de código intenta reproducir un error observado en otra aplicación 😛 .

Categories
PHP Seguridad XSS

XSS en Apress.com

Mientras intentaba comprar un ebook, encontré que apress.com es vulnerable a XSS.

Ejemplos:

  • XSS (Funciona en IE y Firefox)
  • XSS (Funciona bien en Firefox, pero no termina de cargar en IE)

Esto demuestra que no solo nosotros los novatos cometemos errores tan básicos como el uso no adecuado de $_SERVER['PHP_SELF'] 😀

Categories
PHP Seguridad XSS

XSS o SQL Injection

Una pregunta hecha en un foro:

hola gente

normalmente mis sitios php incluyen en el index (el cual incluye las secciones) el siguiente codigo:

php:

foreach($_REQUEST as $nombre_campo => $valor){
   $asignacion = "$" . $nombre_campo . "='" . $valor . "';";
   eval($asignacion);
}

no hace mas que capturar todo el $_REQUEST y transformarlo en variables comunes.

intentando evitar ataques via XSS o SQL injection es el unico codigo que me resta por analizar, pero no logro llegar a la conclusion de si es o no peligroso o deberia escribir todas y cada una de las variables.

ustedes que opinan?

Categories
PHP Quiz Seguridad

Implicancias de la codificación del documento

En esta edición del quiz, un poco sobre la influencia que tiene la codificación de una página que se envía al cliente.

php:

<?php

$charset = 'utf-8';

/* Comprobación simple del charset: no debe contener caracteres raros  */
if ( !empty($_GET['charset']) && preg_match('/^[a-z\d-]+$/i', $_GET['charset']) )
        $charset = $_GET['charset'];
       
header('Content-type:text/html; charset=' . $charset);

?>
<html>

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

<body>

<?php

if ( !empty($_GET['url']) )
        echo sprintf('<a href="%s">Enlace</a>', htmlentities($_GET['url']));

?>

</body>

</html>

¿Qué problema o problemas existen en el código mostrado?

Solución

Una alternativa de solución, es la que comenta Francesc, sin embargo la funcion htmlentities no acepta todos los encodings, lo que podría conllevar a que el código mostrado sea vulnerable a ataques XSS, para evitar esto, lo mejor es evitar que el usuario establezca el encoding del documento.

Categories
PHP Seguridad

Mensajes de error

Hace instantes, visitando un sitio con artículos sobre programación, me econtré con un curioso error al intentar acceder a un elemento inexistente (id=25).

code:

No exite la página 1 de resutados. Hay solo un total de 0

Al cambiar el valor esperado por 25', me muestra lo siguiente 😀 :

Ocurrió un error al ejecutar el query "SELECT COUNT(*) FROM articulos, creditos, temas, stats WHERE (articulos.fecha <= now() AND temas.id_cat = articulos.id_cat and creditos.id_autor = articulos.id_credito and articulos.clave = stats.id_nota) AND (articulos.id_cat <> 33 AND articulos.id_cat <> 34) AND articulos.id_credito = 25\' ORDER BY articulos.fecha DESC". La base dijo : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\' ORDER BY articulos.fecha DESC' at line 1.

Sin duda, es un gran descuido de la persona que hizo esto, porque muestra incluso la consulta SQL generada 😛 .

Obviamente no pondré la dirección de la página afectada, mientras no hayan corregido ese pequeño error.