Soy nuevo en Perl y estoy interesado en publicar unas tablas de MySQL en la web con Perl. Empezaré por el login. La verdad que este código lo he encontrado en este mismo foro. Me gustaría saber que tan seguro es usar este código:
Using perl Syntax Highlighting
- #!/usr/bin/perl
- #
- # Ejemplo de CGI::Session para login
- #
- use strict;
- use warnings;
- use diagnostics;
- use CGI::Session;
- use CGI ':standard';
- use CGI::Carp qw'fatalsToBrowser warningsToBrowser';
- ## Creamos el objeto CGI
- my $cgi = CGI->new();
- ## Creamos el objeto CGI::Session
- my $session = CGI::Session->new("driver:File", $cgi, {'Directory'=>'/tmp/'})
- or die CGI::Session->errstr;
- ## Enviamos la cookie de sesión al usuario
- print $session->header;
- # Aquí guardaremos el perfil del usuario
- my $perfil;
- ## Inicialización
- if ( not $session->param('~registrado') ) { # si el usuario no está registrado
- # vemos si se está registrando en este momento
- if (my $nombre = $cgi->param('login_nombre')) {
- my $passwd = $cgi->param('login_passwd');
- # Vemos si es un usuario conocido por nosotros
- # si lo es, obtenemos su perfil
- if ($perfil = usuario_registrado($nombre, $passwd)) {
- # Guardamos el perfil asociado a la sesión
- $session->param('perfil', $perfil);
- $session->param('~registrado', 1);
- }
- else { # Es un desconocido, le pedimos que rellene el registro otra vez
- presenta_login('Usuario desconocido');
- exit;
- }
- }
- else { # No está registrado ni se está registrando
- presenta_login('Identifíquese');
- exit;
- }
- }
- else { # es un usuario registrado (hay una sesión de él)
- # recuperamos el perfil, desde la sesión
- $perfil = $session->param('perfil');
- }
- # A partir de aquí, sabemos qué usuario es, y su perfil
- # Podemos presentarle las opciones propias de un usuario registrado
- my $nombre = $perfil->{nombre}; # otra forma de hacerlo sería recuperar esta información
- my $email = $perfil->{email}; # desde la base de datos, ya que sabemos qué usuario es
- if ($cgi->param('Desconectar')) { # caso de que el usuario quiera desconectarse
- $session->clear(['~registrado']); # olvidamos que estaba registrado
- print # despedida
- start_html('Desconexión'),
- h1('Desconexión'),
- hr(),
- p("Adios, $nombre"),
- end_html()
- ;
- }
- else { # una página normal
- print
- start_html('Bienvenido'),
- h1('Bienvenido'),
- hr(),
- p("Bienvenido $nombre ($email)"),
- hr(),
- p(a({-href=>'ficheros.html'},'Ver lista de ficheros')),
- p(a({-href=>$cgi->url() . '?Desconectar=1'},'Desconectar')),
- end_html()
- ;
- }
- # Perfil de un determinado usuario
- sub usuario_registrado {
- my ($nombre, $passwd) = @_;
- # aquí consultaríamos una base de datos, por ejemplo
- if ($nombre eq 'JF' and $passwd eq '2010') {
- # si es un usuario en nuestra base de datos, recuperamos su perfil
- }
- return;
- }
- # Presenta el formulario de entrada
- sub presenta_login {
- my $titulo = shift;
- print
- start_html,
- h1('Registro de entrada: ' . $titulo),
- start_form,
- p('Nombre: ' . textfield('login_nombre')),
- p('Contraseña: ' . password_field('login_passwd','',8,8)),
- p(),
- submit('Entrar'),
- end_form,
- end_html()
- ;
- }
Coloreado en 0.007 segundos, usando GeSHi 1.0.8.4
La subrutina usuario_registrado, la voy a reemplazar por un consulta MySQL: Es aquí donde tengo duda si alguien puede descargar el código para hackear el usuario y contraseña, ¿qué podría hacer?
Saludos y gracias.