Tema: Seguridad
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/04/2004, 10:23
josemi
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

No es que tengas que filtrar esas palabras "peligrosas", solo tienes que hacer que todo lo que metas en la consulta sea "inofensivo".

Por ejemplo, si un campo de texto lo tienes que usar en una consulta, asegurate de meterlo como una cadena de texto valida para sql. Todas las bases de datos tienen reglas de validacion para sus tipos de datos en sus consultas. Por ejemplo, en MySQL el caracter "peligroso" es ':

SELECT * FROM usuarios WHERE usuario='$_POST[usuario]' AND clave='$_POST[clave]'

Parece seguro, ¿verdad? Pero si $_POST[clave]=' OR '1'='1 , tendriamos

SELECT * FROM usuarios WHERE usuario='usuario' AND clave='' OR '1'='1'

Si la validacion de usuario se basa en que esa consulta devuelva un numero de registros distinto de 0, pues ya la hemos liado.

El "truco" es "desactivar" las ' del contenido de $_POST[clave] con mysql_escape_string() (www.php.net/mysql_escape_string).

Y la maxima siempre es nunca fiarse de lo que llega al script desde el lado del cliente. Ni las cabeceras HTTP, ni los datos de un formulario validado con javascript, ni el ID de sesion, ni el contenido de un fichero, ni unas cookies, nada absolutamente nada del lado del cliente esta a salvo de una simple manipulacion.

Y otro consejo: al enemigo ni agua. Traduccion: en entorno de produccion, nada de mensajes de error que muestren las "tripas" de la aplicacion. Asi que error_reporting a cero, el mysql_error() nada en el navegador. Nada que sirva de pista al enemigo.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.