Quisiera saber como protejer mis paginas php-mysql contra las inyecciones, tanto sql como de codigo, y como se hacen? mas que nada para evitar-lo
saludos
| ||||
tcl suena a grupo hacker :P Por lo que yo tengo entendido la mejor forma de evitalarlas es poniendo las variables globales a off del apache, y programando asi tu página, ademas en las consultas a sql que hagas con variables que se pasen por get, usar encadenamiento de variables para pasar las consultas "consulta= Selec * from tabla where nombre=".$_GET["nombre"];
__________________ echo ( www.tutorial-enlace.net == tutoriales gratis ) ? 'Aprenderas gratis !!' : 'No aprenderas !!'; |
| |||
buenas, voy a explicarte un poco de que se trata esto... Por ejemplo cuando tenemos q validar a un usuario la consulta sql es algo asi
Código:
pero q pasa si el atacante inserta algo q no corresponde, por ejemplo en el lugar del pass te pone asi "estepass" or pass != "" ... el color naranja es el pass q tendria q haber sido pasado por GET... entonces la consulta con inyeccion esa quedaria asi...."select * from TablaUsuario where nomb = ".$_GET['usu']." and pass = ".$_GET['pass'].""
Código:
entonces (aclaro la sintaxis no esta del todo bien es solomente de ejemplo para poder explicarlo) pasandonos por GET nos pasaron el nombre de usuario "UsuarioGET" y en lugar del pass nos paso " estepass or pass != "" ...."select * from TablaUsuario where nomb = "UsuarioGET" and pass = "estepass" or pass != "" como el usuario lo va a encontrar y cuando se compare el pass dira q es incorrecto pero el " or pass != "" " como el campo pass siempre es distinto a NULL se podria logear con cualquier usuario... la unica frma de evitar esto es mediante el script en php se depure el string pasado, primero q nada sacando los caracteres "$%&/()@#;" porq estos se pueden usar en contra sulla y tener claro de limitar la cantidad de caracteres para los usuarios y los pass, por ejemplo el nombre de usuarios yo no permito q sean mayores a 15 digitos y los pass a 10, y cuando reciven los script de php verifico q no sean mayores a esos valores, si lo son hay un intento de hack... otra buena forma de evitar algunas cosas es q se encripte el pass del usuario y se guarde ya encriptado en la base de datos, y cada vez q se quieran logear solamente hay q encriptarlo y despues comparar el pass ingresado con el pass guardado... aca dejo como manejo mas o menos los script contra esto, aclaro no es la mejor forma pero si bastante buena y nada complicada para entender... Código PHP: |
| |||
Una opcion algo mas comoda podria ser la siguiente. Código PHP: Código PHP: Un saludo.
__________________ SymbianForever SymbianForever.com, todo sobre y para tu symbian aNieto2K | Themes para WordPress De todo un poco |
| ||||
pero si en ves de usar GET usas POST para pasar los formularios, con la clave y el user y ademas las variables globales a OFF, esta forma de hackear seria inutil desde mi punto de vista... por que no podrian ingresarte variables mediante la url los juakers... como el ejemplo que explico dario dario.
__________________ echo ( www.tutorial-enlace.net == tutoriales gratis ) ? 'Aprenderas gratis !!' : 'No aprenderas !!'; |
| |||
Cita: buenas, por el metodo POST no se puede pasar variables ni valores en la URL pero el problema es q este es un punto demaciado facil de saltear, lo esencial de la seguridad contra sql inyeccion es la depuracion de los string en el codigo, a demas de un buen estudio sobre las tablas, ah y sobre todo trata de manejar los errores vos no dejes q los errores q se producen lo informe php porq cuando se producen errores es cuando a los hacker mas informacion se le da, asiq trata de manejar todos los errores...
Iniciado por raffskizze pero si en ves de usar GET usas POST para pasar los formularios, con la clave y el user y ademas las variables globales a OFF, esta forma de hackear seria inutil desde mi punto de vista... por que no podrian ingresarte variables mediante la url los juakers... como el ejemplo que explico dario dario. Spyn_ET tienes razon esa es una forma comoda tambien de de agregar seguridad pero no es del toda segura, por ejemplo supongamos q desarrollamos un paginador de resultados, y cuando queremos ver los otros 30 resultados lo pasamos por URL, la consulta sql quedaria... Consulta correcta:
Código:
Consulta erronea:select * from alimentos where = 'manzana' limit 30,30;
Código:
pero que pasaria si en vez de pasar numeros el atacante modifica e inyecta otra consulta o un DELETE o lo que sea... ese es un error tipico y en la consulta el limite no se puede poner con comillas, entonces es un error potencial y por lo tanto yo recomiendo acostumbrar la depuracion de string, por ejemplo los valores pasados por GET o POST para la paginacion es convertir la cadena en un integer con settype($loquesea,'integer');...select * from alimentos where = 'manzana' limit '30','30'; espero que sea alla entendido.... |
| |||
Cita: El echo es que esto no te asegura en lo mas minimo que no te envien datos, ya que un persona maliciosa pude reproducir tu forma e instalarla en otro servidor e enviar los datos a tu script y realizar una consulta no autorizada.pero si en ves de usar GET usas POST para pasar los formularios, con la clave y el user y ademas las variables globales a OFF, esta forma de hackear seria inutil desde mi punto de vista... por que no podrian ingresarte variables mediante la url los juakers... como el ejemplo que explico dario dario. Código PHP: Código PHP: Código PHP:
En el ultimo ejemplo como bien se comento en los casos que se pasen variables que esperan valores numericos lo mejor es convertir los datos que llegan al script al tipo que se requiera. Otra cosa mas la funcion mysql_query no puede procesar dos consultas en una misma sentencia, asi que en ultimo ejemplo no aplica que envie un delete, update o similares. Para la version de la api que trabaja con php 5 hay que tener cuidado ya que hay una funcion que es mysqli_multi_query la cual si no se hace una validacion de datos adecuda puede dejar pasar una consulta que no esperemos y causar un desastre. Para otra bases de datos creo que las funciones correspondeientes aceptan mas de uan consulta como es la de postgresql. Ahora como resumen y como ya te lo comentaron siempre es una buena practica que tu escript valide los datos que llegan de tu forma, por el tipo y por el contenido para evitar sorpresas.. Saludos. |
| |||
tambien es bueno tener encuenta q se hara en el script y sacar la mayor cantidad de permisos para el usuario q se usara en la coneccion a la base de datos... asi si se necesita solamente hacer una consulta select, restringes todos los demas permisos y por mas q pueda agregar algo en ese script no podra hacer nada el atacante... algo mas, esto es un pedido ya que no estoy muy familiarizado con las consultas sql, podrian poner alguna pagina q explique sobre las consultas (no las consultas basicas, algo q sea avanzado) y si puede ser en español mejor, pero sino ni modo... gracias y salu2 |
| |||
Echarle un vistazo a esto, puede serviros. http://www.xlwebmasters.com/modules....&f=doc2&id=595 Un saludo.
__________________ SymbianForever SymbianForever.com, todo sobre y para tu symbian aNieto2K | Themes para WordPress De todo un poco |
| ||||
Re: Sobre las inyecciones Sql usa esta funcion para todas las variables externas $_GET $_POST $_COOKIE etc... Código PHP: Código PHP: |