Categories
Quiz Seguridad

Ejercicio de la Semana: Visualización de perfiles

Continuando con la serie, pongo otro script para que se diviertan.

php:

<?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

9 replies on “Ejercicio de la Semana: Visualización de perfiles”

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.

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']))

Comments are closed.