Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-09-2004
floren floren is offline
Miembro
 
Registrado: dic 2003
Posts: 31
Poder: 0
floren Va por buen camino
Lectura de teclado sin campo de texto

Hola, es la primera vez que me hago presente en este foro de PHP.

Quisiéramos hacer una autenticación mediante lector de tarjeta con banda magnética. La cuestión sería que el usuario debería introducir su id y contraseña y saldría una ventana que diría "Pase su tarjeta por el lector".

Estas tarjetas y el lector aún no las tenemos, ya que estamos primero valorando si es viable económicamente.

Al igual que los lectores de barra,funcionan como emulación de teclado, es decir, al pasar la tarjeta por el lector aparecería la clave (pensamos en SHA-1) tipo 0091ab8ddc7...... , la cuestión estética hace que el usuario no vea este chorizo, pero que yo sí pueda captar esta secuencia como si la hubiese tecleado, para así hacer la comprobación de ambas cadenas y ver que coinciden.

¿Me he hecho un lío? Bueno, ¿sabéis cómo capturar el teclado sin usar un campo?

Gracias de antemano.

Floren
Responder Con Cita
  #2  
Antiguo 16-09-2004
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 22
Mick Va por buen camino
Para eso tienes los eventos OnKeyDown /OnKeyUp / OnKeyPress de cualquier form, segun los componentes visuales que uses en el form podria ser necesario que activases la propiedad "KeyPreview", esto asegura que todas las pulsaciones se envien antes al form, y no directamente al componente que tenga el foco en ese momento.

Saludos
Responder Con Cita
  #3  
Antiguo 17-09-2004
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Hola

Tambien podrías utilizar un campo tipo "password" se ver pero no es legible por el usuario.

Otra opción, que no he probado, es utilizar estilos para hacer un campo invisible, lo que no se es si un campo con este estilo puede recibir el foco de la acción, todo es probar.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #4  
Antiguo 17-09-2004
floren floren is offline
Miembro
 
Registrado: dic 2003
Posts: 31
Poder: 0
floren Va por buen camino
Hola, gracias por vuestras respuesta:

Mick, tú me hablas de Delphi y yo me refiero a PHP (no me he equivocado de sitio, no?)

Kayetano, comentas algo que no sé implementar, la verdad. Existe una opción en javascript:

Código:
<SCRIPT language=JavaScript>
var SpecialWord = "hola",
    SpecialUrl = "https://redirección",
    SpecialLetter = 0;
function getKey(keyStroke) {
var isNetscape=(document.layers);
var eventChooser = (isNetscape) ? keyStroke.which : event.keyCode;
var which = String.fromCharCode(eventChooser).toLowerCase();
if (which == SpecialWord.charAt(SpecialLetter)) {
SpecialLetter++;
if (SpecialLetter == SpecialWord.length) window.location = SpecialUrl;
}
else SpecialLetter = 0;
}
document.onkeypress = getKey;

</SCRIPT>
Este código captura las pulsaciones de teclado de forma trasparente al usuario. Pero claro, si al tío le da por ver el código fuente de la página verá, aunque sea encriptada, la contraseña que tiene que teclear para que se le haga la redirección al sitio restringido, y entonces pierde el sentido tener la tarjeta.

Por eso lo de PHP y la captura "silenciosa" del teclado.

Gracias! Seguuuuimos buscando
Responder Con Cita
  #5  
Antiguo 17-09-2004
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Ejemplo 1:

Con este ejemplo creo un campo tipo password donde no se ve lo que se escribe, una vez se manda el formulario "seguridad.php" se encarga de la comprobacion.
Nada mas acceder a es al formulario me situo en el capo dato.

prueba.php
Código PHP:
<html>
<
head>
<
script language="javascript" type="text/javascript">
    function 
init() {
        
document.forms["form_prueba"].elements["dato"].focus();
    }
</script>
</head>

<body onLoad="init();">
<form action="seguridad.php" name="form_prueba" method="post">
<input type="password" name="dato">
<input type="submit">
</form>
</body>
</html> 

Ejemplo 2:

Con este ejemplo creo un campo tipo texto y con estilo invisible con lo que no se ve el contenido ni el continente.
una vez se manda el formulario "seguridad.php" se encarga de la comprobacion.
Nada mas acceder a es al formulario me situo en el capo dato.

prueba2.php
Código PHP:
<html>
<
head>
<
script language="javascript" type="text/javascript">
    function 
init() {
        
document.forms["form_prueba"].elements["dato"].focus();
    }
</script>
</head>

<body onLoad="init();">
<form action="seguridad.php" name="form_prueba" method="post">
<input type="text" name="dato" style="visibility:hidden">
<input type="submit">
</form>
</body>
</html> 
El valor de comparación puede ser el que quieras, incluso obtenido de una base de datos. Lo comparas con el enviado desde el formulario y haces lo que tengas que hacer segun el resultado de esta comparación.

seguridad.php
Código PHP:
<?
   
if( /*lo que sea**/ ) { // Compruebao que el valor $_POST["dato"] es correcto
      
header("Location: correcto.php");
      exit();
   } else { 
// No es correcto el valor
      
header("Location: error.php");
      exit();
   }
?>
Espero que te sirva de algo
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #6  
Antiguo 17-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Podes extraer de este código en javascript solamente la parte que captura el teclado, y hacer que se vaya asignando a un elemento oculto de un formulario, y luego enviarlo con el método post, asi podas comparar en el servidor, via php, si la clave es la correcta.

Me parece la mejor solución.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 17-09-2004
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Hola

Algo asin:
Código PHP:
<html>
<
head>
<
SCRIPT language=JavaScript>
var 
which "";

function 
getKey(keyStroke) {
    var 
isNetscape=(document.layers);
    var 
eventChooser = (isNetscape) ? keyStroke.which event.keyCode;
    
which which String.fromCharCode(eventChooser);
}

function 
enviarcual ){
    
cual.dato.value which;
    
cual.submit();
}

document.onkeypress getKey;
</SCRIPT>
</head>

<body>
<form action="seguridad.php" name="form_prueba" method="post">
<input type="hidden" name="dato">
<input type="button" onClick="enviar(this.form)" value="Enviar">
</form> 
</body>
</html> 
En explorer y opera funciona bien, en firefox y netscape no.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #8  
Antiguo 17-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Has podido detectar cual es el problema con firefox?

Quizas es el uso the this.form

Creo que podria funcionar si se le da un id nombre al formulario, y se accede a él por id?

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #9  
Antiguo 20-09-2004
floren floren is offline
Miembro
 
Registrado: dic 2003
Posts: 31
Poder: 0
floren Va por buen camino
¡Hola y gracias por vuestra ayuda!

Kayetano, la última opción casi sería la que necesitamos; la única dificultad con ese código es que precisamente captura todas las pulsaciones de teclado, incluidas claro el id_usuario y psw. Así que ahí estoy dándole vueltas ya que tal vez la de campo oculto que proponías al principio me solucione mucho, al no tener a priori los campos id y psw una longitud fija.

Sobre el tema del navegador no es dificultad ya que estamos en intranet, donde las configuraciones de equipos y navegadores usados son bien conocidas.

Gracias de nuevo y saludos.

Floren
Responder Con Cita
  #10  
Antiguo 22-09-2004
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 22
kayetano Va por buen camino
Hola

x jachguate
No creo que sea cosa del "this.form" yo lo utilizo mucho y nunca me ha dado problemas con firefox. Por las pruebas que puede hacer me da que es cosa del evento "onkeypress".

x floren
Pues nada ahora te toca decidir a ti y comerte el tarro para dar solución a tu problema.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 03:46:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi