Foros del Web » Programando para Internet » PHP »

Seguridad en datos de entrada web

Estas en el tema de Seguridad en datos de entrada web en el foro de PHP en Foros del Web. Bastante preocupado por lacras como el spam en las webs y sobre como filtrar la información de entrada que se produce en formularios, empecé a ...
  #1 (permalink)  
Antiguo 20/04/2009, 17:42
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Seguridad en datos de entrada web

Bastante preocupado por lacras como el spam en las webs y sobre como filtrar la información de entrada que se produce en formularios, empecé a pensar sobre como mejorar o reemplazar a los "relativamente inseguros" captchas. Se que mucha gente ya habrá pensado uno basado en mostrar una imagen aleatorias (por ejemplo la foto de un perro) y preguntarle al usuario que esta viendo. Esto es bastante más difícil de reconocer para un ordenador, al menos hoy en día, pero tiene importantes limitaciones:

1. Es vulnerable a ataques con personas reales que verifican las imágenes de forma intencionada para ingresar datos falsos.

2. Como no es una imagen que se pueda pregenerar, al menos de forma eficiente, su "seguridad" ante bots está limitada al número de imágenes que tengas en tu BD.

Para el primer caso hay difícil solución, solo se me ocurre poner algún límite a la cantidad de información que puede entrar desde un determinado "usuario", habría que identificarlo mediante la ip (así al menos debería usar proxys cada vez que quisiera registrar más datos para cambiar su ip, o reiniciar el router), o mediante alguna cookie (si ya se que esto no es mucho, pero es cuestión de ir poniendo trabas).
Ejemplo: Desde una misma ip solo se pueden registrar 10 personas al día en la web y a partir de ahí tendrían que usar los métodos ya mencionados.

Para el segundo caso me pregunto si no sería posible utilizar google, esto es mediante programación del lado del servidor:
- Hacer una búsqueda de la palabra "perro".
- Coger una imagen de las que muestre google.
- Hacer una copia temporal de dicha imagen en nuestro hosting.
- Preguntar al usuario por la imagen.
- En caso de ser cierta o requerir otra imagen destruirla.
- Validación aceptada.
Algo así han empezado a hacer en el research de Microsoft: http://research.microsoft.com/en-us/...ojects/asirra/

Con esto tendríamos la ventaja de tener una BD de imágenes enorme y sin consumir recursos, por otro lado adquiriríamos una pequeña desventaja: Podría aparecer alguna imagen poco apropiada para la verificación del usuario (bueno esto podría solucionarse con un cartelito que pusiera imagen by google y darle al usuario la opción de marcarla como inadecuada, quedando guardada esa marcación y referencia a la imagen en nuestra BD para que no volviera a aparecer).

Otro método es utilizar imágenes transparentes para mediante css (los cuales no suelen interpretar los spambots) colocarlas unas encimas de otras y formar un captcha no deformado muy legible para un humano pero difícil de leer para un bot, porque debería posicionar las capas, tomar una captura del resultado y luego interpretarlo.

Otra idea que se me ocurrió es utilizar imágenes animadas o flash de la siguiente manera:
Todos conocemos los efectos ópticos, sin embargo estos no afectan a los ordenadores, estoy hablando de cosas como el efecto moire, lineas que son paralelas pero que en función del fondo que les pongamos, parecen curvarse... lineas que giran y forman un círculo...etc...
¿Cómo podría un ordenador leer un gif y ver que imagen se ha formado? poder podría pero ¿cual es la referencia? sería bastante complejo de programar un lector de estos datos.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por Dude--; 20/04/2009 a las 19:00
  #2 (permalink)  
Antiguo 20/04/2009, 17:51
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Seguridad en datos de entrada web

Un ejemplo de lo último que comenté es la siguiente imagen, esta es ESTÁTICA, de hecho es .jpg y sin embargo parece moverse, gracias a las "peculiaridades" del sistema óptico humano.


Otra forma de aprovechar el tema de los efectos ópticos, se le pregunta al usuario que pone en esta imagen

Todos pondrán coca coLa, menos el ordenador que si pudiera leer la fuente pondría coca-coCa, es debido al efecto STROOP, que es como se llama la clase de interferencia semántica producida como consecuencia de la automaticidad de la lectura. Creemos saber lo que pone y ya no leemos con atención, lo damos por hecho.

Otro más, si miras los puntos q parpadean los verás rosas. Si centras la mirada en la cruz central el punto en movimiento parpadeará en VERDE y lo mejor: Si miras durante un rato la cruz al final los puntos rosas desaparecerán y solo verás el verde girar.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."

Última edición por Dude--; 20/04/2009 a las 18:00
  #3 (permalink)  
Antiguo 20/04/2009, 21:47
Avatar de polin2bclan  
Fecha de Ingreso: julio-2008
Mensajes: 73
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: Seguridad en datos de entrada web

Amigo.

El captcha por lo general funciona así:
Creas una sesión aleatoria, los caracteres de la sesión se muestran en una imagen, por lo tango, la imagen en realidad no tiene caracteres, simplemente se montan encima de ella mientras muestras el captcha en tu campo.

Como la sesión es aleatoria si alguien hace un robot de spam usando un codigo, le sera inutil porque es ramdom y se genera una diferente cada ves que cargas la página.

captcha.php
Código PHP:
<?php
session_start
();
function 
randomText($length) {
    
$pattern "1234567890abcdefghijklmnopqrstuvwxyz";
    for(
$i=0;$i<$length;$i++) {
      
$key .= $pattern{rand(0,35)};
    }
    return 
$key;
}

$_SESSION['tmptxt'] = randomText(8);
$captcha imagecreatefromgif("bgcaptcha.gif");
$colText imagecolorallocate($captcha691111);
imagestring($captcha5167$_SESSION['tmptxt'], $colText);

header("Content-type: image/gif");
imagegif($captcha);
?>
Pones una imagen en el mismo directorio de este archivo llamada bgcaptcha.gif
Para implementarla seria asi:
Código PHP:
<strong>C&oacute;digo Anti-Spam:</strong><br />
<
div id="load_captcha"><img src='wp-content/plugins/polin/captcha/captcha.php' title='1' width='100' height='30' /></div>
<
input name="codecptcha" type="text" class="frm_field" id="codecptcha" value="" maxlength="50" /> 
Y tu procesador de datos debera comprobar asi:
procesador.php
Código PHP:
<?
session_start
();
if(isset(
$_POST['codecptcha'])) { $codecptcha=$_POST['codecptcha']; }
if(
$codecptcha==$_SESSION['tmptxt'])
    {
echo 
"El capctha es correcto";
}
else
{
echo 
"El codigo que ingreso es incorrecto";
}
  #4 (permalink)  
Antiguo 21/04/2009, 08:57
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 19 años, 10 meses
Puntos: 4
Respuesta: Seguridad en datos de entrada web

Se como funcionan los captchas y no importa que la sesion sea aleatoria, hay programas para "enseñar" al ordenador a romper los captchas. Busca un poco por google y verás porque propongo una discusión sobre otras alternativas más seguras.
__________________
"El camino empieza renunciando el control y volviéndose flexibles, como una brizna de paja en un huracán."

"Desconozco tanto... es excitante comenzar a nadar en este mar de dudas..."
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:00.