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>

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 resultanteHmm, he encontrado la respueta a mi pregunta... olviden todos mi off topic!