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 馃槢 .
/* 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”
Mmm, estoy verde en estas cosas de los errores, pero el header
Location:
debe de llevar una ruta absoluta, aunque as铆 tambi茅n funciona.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 馃槈
mmm yo me inclinar铆a m谩s por el lado de sql injection.
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()
Alex, tengo una duda, haber si sabes 驴Por que es necesario detener el script despues de una redirecci贸n mediante headers?...
:-S
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.Hmm, he encontrado la respueta a mi pregunta... olviden todos mi off topic!