Categories
PHP Quiz Seguridad

Más sobre validación de datos en PHP

Como había mencionado anteriormente, para desarrollar aplicaciones seguras, hay que conocer bien la herramienta o lenguaje con el que se trabaja. Espero que estos pequeños quiz intenten mostrar algunas de las fallas más comunes que cometen los que recién empiezan o ya desarrollan con PHP.

El código mostrado a continuación, ¿tiene alguna falla? ¿cuál?

php:

<?php

if      ( empty( $_GET['user'] ) && empty( $_POST['user'] ) )
        die( 'Bad parameter' );
elseif ( ! empty( $_GET['user'] ) && intval( $_GET['user'] ) < 0 )
        die( 'Bad parameter' );
elseif ( ! empty( $_POST['user'] ) && intval( $_POST['user'] ) < 0 )
        die( 'Bad parameter' );

$sql = 'SELECT  id, name, email
        FROM    users
        WHERE   id = '
. mysql_real_escape_string($_REQUEST['user']);

echo $sql;

?>

Como ya saben, el código mostrado sólo es referencial, pero vale comentar la forma correcta de implementar ese pedazo de código.

Categories
PHP Quiz Seguridad XSS

Pequeño ejemplo de XSS

XSS, es según la Wikipedia un tipo de vulnerabilidad surgida como consecuencia de errores de filtrado de las entradas del usuario en aplicaciones web.

Mostraré un ejemplo que creo que todos hemos hecho o seguimos haciendo hasta ahora:

HTML:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
</form>

Y ahora las preguntas: ¿Qué tiene de malo este código?, ¿Es vulnerable a ataques XSS? Espero sus respuestas.

Categories
PHP Quiz Seguridad

Autenticación de usuarios y sesiones en PHP

Continuando con la pequeña serie de posts que intentan mostrar algunas fallas comunes que hacemos los aficionados a PHP, e incluso los que se dedican profesionalmente a desarrollar aplicaciones con este lenguaje, esta vez tocaremos el tema de sesiones.

user.php, necesita de la clase ezSQL, puedes saber mas sobre esta clase en este artículo.

php:

<?php

class User {
        var $id;
        var $name;
        var $email;
       
        function Authenticate($user, $password) {
                global $db, $site_key;

                $user = $db->get_row (
                        'SELECT id, name, email, password
                                FROM users
                                WHERE username = \''
. $db->escape($user) . '\'');
               
                if ( $user && $user->password == md5( $site_key . $password ) ) {                     
                        $this->id = $user->id;
                        $this->name = $user->name;
                        $this->email = $user->email;
                        return true;
                }
                return false;
        }
}

?>

php:

// login.php
<?php

include dirname(__FILE__) . '/db.php'; # genera una instancia de la clase ezSQL
include dirname(__FILE__) . '/user.php';

/*
if ( ! empty( $_SESSION['user'] ) ) {
        header( 'Location: /admin' );
        exit();
}
*/

if ( ! empty( $_POST['user'] ) && ! empty( $_POST['password'] ) ) {     
        $user = new User();
        if ( $user->Authenticate( $_POST['user'], $_POST['password'] ) === true ) {
                $_SESSION['user'] = $user;
               
                header( 'Location: /admin' );
                exit();
        }
}

?>

¿Qué problema existe en el código mostrado? -no es un error de sintáxis 😀

Nota: si eres testigo de otros errores 🙂 y quieres compartir esa información, no dudes en contactarnos (describe el problema, una posible solucion, si ya lo publicaste en tu blog, envíanos el link para comentar el problema y citar tu post)

Categories
PHP Varios

PHP y SQL Server en Microsoft

Es raro ver que Microsoft publique este tipo de tutoriales.

Fuente: TheServerSide.NET

Categories
PHP Quiz

Redirecciones en PHP

Muchos alguna vez hemos utilizado el siguiente código para la redirección de páginas

php:

<?php

$return = '/';
if ( ! empty($_GET['return']) )
        $return = $_GET['return'];
elseif ( ! empty($_SERVER['HTTP_REFERER']) )
        $return = $_SERVER['HTTP_REFERER'];

header('Location: ' . $return);
exit();

?>

¿Cuál es el error que existe en el código mostrado?