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 馃槢 .

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>

8 replies on “Quiz de la semana sobre PHP”

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 馃槈

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

$post->id;

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()

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.

Comments are closed.