Ejercicio de la Semana: Visualización de perfiles
Por: alex | 23 Enero 2007 | Ver comentarios |
Continuando con la serie, pongo otro script para que se diviertan.
<?php
include_once './config.php';
if ( empty($_REQUEST['id']) && empty($_REQUEST['nick']) ) {
die('No user selected');
}
if ( isset($_REQUEST['nick']) ) {
if ( preg_match('/^[a-z0-9]{3,20}$/i', $_REQUEST['nick']) ) {
$where = "WHERE nick='" . $bcdb->escape($_REQUEST['nick']) . "'";
}
else {
die('Invalid nick: ' . $_REQUEST['nick']);
}
}
elseif ( !preg_match('/\d+/i', $_REQUEST['id']) || ($id = $bcdb->escape($_REQUEST['id'])) < 0 ) {
die('Invalid user id: ' . $id);
}
else {
$where = "WHERE id='$id'";
}
if ( ! ($user = $bcdb->get_row("SELECT * FROM users $where")) ) {
die("User does not exists");
}
header('Content-type: text/html; charset=utf-8');
?>
<html>
<head>
<title>Profile: <?php echo $user->name; ?></title>
</head>
<body>
<dl>
<dt>Nombre</dt>
<dd><?php echo $user->name; ?></dd>
<dt>Email</dt>
<dd><?php echo $user->email; ?></dd>
<dt>Página Web</dt>
<dd><a href="<?php echo $user->url; ?>"><?php echo $user->url; ?></a></dd>
</dl>
</body>
</html> ¿Existe algún problema con el código mostrado? Si es así, ¿cuál o cuáles?
Nota: A sugerencia de Agustí, he puesto una página de prueba. Si desean ver el código fuente de los ficheros php, aumenten una s al nombre. Ej http://test.buayacorp.com/quiz/user.phps
Actualización: Cambios realizados
- Comillas simples agregadas alrededor de la variable
id


Agustí
23 de Enero de 2007, 10:45:26 pm
Esta fàcil, mañana lo comento. Ei he conseguido:
SQL/DB Error — [The used SELECT statements have a different number of columns]
Tb lo he conseguido passar, ahora que me falta descubrir un campo que no controlo de la tabla users.
Agustí
25 de Enero de 2007, 03:41:56 am
He dejado un día entero, para no fastidiar a los demas:
el problema esta en que el filtro sobre id no es correcto, ya que solo validamos que tenga un numero y luego escapa los quotes, pero podemo hacer unions… podiamos probar el load_file
ejemplo:
http://test.buayacorp.com/quiz/user.php?id=0%20union%20select%20id,email,url,name,0%20from%20users
alex
25 de Enero de 2007, 07:26:36 am
En efecto Agustí, la variable
idno está correctamente validada.¿Existe algún otro problema?
Yo
25 de Enero de 2007, 09:03:41 am
Hola, como haces para imprimir PHP en el wordpress? Es un plugin? Como se llama?
alex
25 de Enero de 2007, 09:24:10 am
El plugin se llama iG_Syntax_Hiliter, puedes descargarlo desde: http://blog.igeek.info/still-fresh/2006/02/25/code-for-fun/
freddy
25 de Enero de 2007, 09:30:45 am
Yo lo modificaria de esta manera
if ( isset($_REQUEST[’nick’]) ) {
if ( preg_match(’/^[a-z0-9]{3,20}$/i’, $_REQUEST[’nick’]) ) {
$where = “WHERE nick=’” . $bcdb->escape($_REQUEST[’nick’]) . “‘”;
}
else {
die(’Invalid nick: ‘ . $_REQUEST[’nick’]);
}
}elseif(isset($_REQUEST[’id’])){
if ( !preg_match(’/\d+/i’, $_REQUEST[’id’]) || ($id = $bcdb->escape($_REQUEST[’id’]))
freddy
25 de Enero de 2007, 09:32:44 am
me corto el comentario por la mitad :S
Yo
25 de Enero de 2007, 09:35:16 am
Gracias, funciona perfectamente
alex
25 de Enero de 2007, 09:35:39 am
Si no quieres que corte el contenido, dale una lectura al cuadro que aparece arriba de este campo de texto