Hola a todos,
Esta yo creo que debe ser fácil. ¿Para que te hagan inyección SQL tienen que conocer el nombre de las tablas? ¿O eso tambien pueden sacarlo? Sino con poner nombre de tabla 'raros' se ganaría bastante, no?
| |||
injeccion SQL Hola a todos, Esta yo creo que debe ser fácil. ¿Para que te hagan inyección SQL tienen que conocer el nombre de las tablas? ¿O eso tambien pueden sacarlo? Sino con poner nombre de tabla 'raros' se ganaría bastante, no?
__________________ Guarda tus configuration files |
| |||
Cita: Eso depende del tipo de ataque que se este intentando realizar. Si el atacante solo quiere ingresar al sistema sin permiso, probablemente no necesite conocer nombres de campos ni de tablas, con solo manipular las datos que van a ser utilizados en la consulta (nombre de usuario y password) podria realizar su ataque.
Iniciado por bictorman ¿Para que te hagan inyección SQL tienen que conocer el nombre de las tablas? En cambio, si un atacante quiere obtener algunos datos quizá deba tener algún conocimiento de la estructura de la base de datos. Lo que decís de los nombres es cierto. Hay ciertos tablas típicas, como las que almacenan contraseñas, que siempre utilizan nombres de campos que siguen un patrón deteminado (el campo que almacena la contraseña generalmente se llama password, pass, contra, etc). Si nosotros utilizamos nombres de campos "no convencionales" estaremos haciéndole las cosas más difíciles al atacante. Igualmente, no deberias confiarte en este tipo de cosas. La validación de los datos ingresados por el usuario es la principal defensa contra los ataques de inyección de sql. Saludos. |
| |||
Estoy usando nombres de tablas poco comunes, aunque reconozco que he caido en llamar password al campo de las password ![]() Para validar los datos estoy usando una funcion "comillas_inteligentes" que encontre en la página de PHP. Código PHP:
__________________ Guarda tus configuration files |
| |||
Esta técnica es eficaz, aunque nunca se puede estar seguro de que funcionará en todos los casos. La idea general de este tipo de funciones es analizar las entradas de los usuarios que van a ser utilizadas en un consulta y "escapar" los caracteres peligrosos que posean estas entradas. PHP dispone de un mecanismo llamado "Magic Quotes" (comillas mágicas) que realiza este trabajo automáticamente. Este mecanismo es general, es decir, no tiene en cuenta el servidor de base de datos que se este utilizando. Por eso, si se encuentra disponible alguna función que realize este trabajo para alguna base de datos en especial (como el caso de mysql_real_escape_string() para bases de datos mysql), es mejor utilizar esta última que la las comillas mágicas. Pero esto trae un problema: si utilizamos dicha función y comillas mágicas esta activado, obtendremos un doble escape. En la función que publicaste, esto se soluciona utilizando la función stripslashes(), que realiza el proceso invierso al realizado por comillas mágicas. En ese script, primero se verifica que comillas mágicas este activo y si lo esta se aplica la función stripslashes para, ahora si, poder aplicar sin problemas mysql_real_escape_string(). Otra solución sería desactivar comillas mágicas, pero eso sólo lo podés hacer si tenes acceso al php.ini, dado que no es posible a través de ini_set(). Saludos. |
| |||
Gracias por tus comentarios Notwen. Me quedo un poquito más tranquilo.
__________________ Guarda tus configuration files |
| ||||
Yo no me fío, prefiero validar de esta forma y no suponer que el usuario haga bien las consultas. Si no cumplen con la expresión regular, los saco y les muestro algún mensaje predefinido. Pasando a otra cosa, te recomiendaría que te fabricaras una función para conectarte, así no lo tienes que hacer a cada rato. Una ventaja de hacerlo así es un código más legible y la posibilidad de esa función detecte si estás o no online y de esa manera 'sabe' si conectarte con la base de datos del servidor o la que tienes en forma local. Los mensaje_final() es una forma que ocupo p' mensajes y luego darle desde dentro de esa función unexit() para que no continúe el código. Igual se me hace una buena forma de mandarle errores personalizados y no caer en lo que claudiovega muestra que hay que evitar. Digo, no pretendo descubrir el hilo negro, pero creo que funciona bien y con lo poderosas que son las expresiones regulares, pues se pueden adaptar muy bien a muchas formas de validación. Así nisiquiera tengo que usar las magic_quotes. Parece que en esto de las BD cada quién tiene su estilo. Dificilmente se puede decir cuál es mejor que cuál, simplemente son diferentes. Este es el mío, gracias por compartir el vuestro. Código PHP:
__________________ "Di no al Internet Explorer" -Proverbio Chino- |