Anuncia aquí

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 :-P .

php:
<?php
/* Timer start */
$mtime = explode(' ', microtime() );
$timestart = $mtime[1] + $mtime[0];

include_once dirname(__FILE__) . '/db.php';

header( 'Content-type: text/html; charset=utf-8' );

if ( empty($_GET['category']) || !is_numeric($_GET['category']) ) {
        header( 'Location: error.html' );
}

$posts = $db->get_results("     
        SELECT  posts.id, posts.name, posts.content,
                    users.name as author
        FROM    posts, users
        WHERE   posts.userid = users.userid AND
                        posts.category_id = {$_GET['category']}
        LIMIT   10"
);

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
<html xml:lang="es">

<head>
        <title>Search results</title>
</head>

<body>

        <div id="content">
        <?php if ( $posts ) : ?>

        <h2><?php echo count($posts); ?> elementos encontrados.</h2>   
       
        <?php foreach ( $posts as $post ) : ?>
               
        <div class="post">                 
                <h4 class="post-meta">
                <a href="ver.php?id=<?php echo $post->id; ?>"><?php echo $post->name; ?></a> |
                <?php echo $post->autor; ?>
                </h4>
                       
                <div class="content">
                <?php echo $post->content; ?>
                </div>
                       
        </div>
               
        <?php endforeach; ?>

        <?php else : ?>
       
        <p>No se encontró ningún post en la categoría seleccionada.</p>
       
        <?php endif; ?> 
        </div>
       
        <div id="footer">
       
        <?php
       
        /* Timer stop */       
        $mtime = explode(' ', microtime());
        $timeend = $mtime[1] + $mtime[0];
        $timetotal = $timeend - $timestart;
        $time = number_format($timetotal, $precision);
       
        echo <<<STATS
<!--
Referer: {$_SERVER['HTTP_REFERER']}
User IP: {$_SERVER['REMOTE_ADDR']}
-->

Página generada en {$time} segundos
STATS;
        ?>
        </div>
</body>

</html>

Esta entrada fue publicada en PHP, Quiz, Seguridad

8 Comentarios

  1. 1 Stankiewicz (14 de noviembre de 2006, 10:53:45 pm) http://www.stan.com.mx

    Mmm, estoy verde en estas cosas de los errores, pero el header Location: debe de llevar una ruta absoluta, aunque así también funciona.

  2. 2 kesar (15 de noviembre de 2006, 05:15:46 am) http://www.kesar.org

    puesss sin meterme mucho en el código..

    el referer se puede modificar, y "creo" que después del header() debería poner un exit.

    Un saludo ;)

  3. 3 IgnacioMarcos (15 de noviembre de 2006, 06:34:03 am) http://ignaciomarcos.com.ar/

    mmm yo me inclinaría más por el lado de sql injection.

  4. 4 Ricardo (15 de noviembre de 2006, 10:17:37 am)

    Hola todos disculpen por la pregunta en este tema soy un principiante en php queria saber para que sirve esto

    $post->id;

  5. 5 alex (15 de noviembre de 2006, 02:04:16 pm) http://www.buayacorp.com

    Stan, gracias por el dato, no sabía lo de las URL absolutas.

    Kesar e Ignacio, ambos tienen razón, ya que por falta de un exit() luego de enviar la cabecera de redirección, el código podría ser vulnerable a SQL Injection. Por otro lado, el código puede sufrir ataques XSS, ya que como menciona Kesar, el valor del referer es modificable.

    Ricardo, el código al que haces referencia se usa para acceder a las propiedades o métodos de un objeto: $objeto->Metodo()

  6. 6 Victor (29 de noviembre de 2006, 02:21:27 pm) http://www.mis-algoritmos.com

    Alex, tengo una duda, haber si sabes ¿Por que es necesario detener el script despues de una redirección mediante headers?...

    :-S

  7. 7 alex (29 de noviembre de 2006, 02:29:49 pm) http://www.buayacorp.com

    Porque la ejecución de script no se detiene al enviar las cabeceras, no lo notas por ejemplo cuando haces uso de header("Location: blabla"), porque el navegador le dá mayor importancia a esta cabecera y hace la redirección, si haces uso de herramientas como netcat o fiddler, puedes ver el verdadero HTML resultante :D .

  8. 8 Victor (29 de noviembre de 2006, 02:30:39 pm) http://www.mis-algoritmos.com

    Hmm, he encontrado la respueta a mi pregunta... olviden todos mi off topic!

Publicar un Comentario

Tu email nunca será publicado o compartido. Los campos requeridos están marcados con un *

*
*

Puedes usar estas etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>