Ver Mensaje Individual
  #36 (permalink)  
Antiguo 10/12/2013, 10:00
vosk
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 11 años, 8 meses
Puntos: 83
Respuesta: Cambiar contenido de una variable mediante if

"...¿Enviar datos modificados? ¿a que te refieres?..."

Me refiero a que sin cookies de servidor ni https si yo cargo tu pagina y visualizo el codigo fuente podré ver a que php apunta el form y entrar manualmente la direccion en la barra de navegacion, y lo mismo pero sin ver el codigo fuente podre ver adonde apuntan los enlaces del mapa de paginas; con esto alguien con mala idea podria probar a enviar una url modificada para ver que responde tu php, p.ej. puede enviar moda.php?num=999999999 y a ver que pasa. Con este ejmplo del num no va a pasar nada, pero nunca se sabe. Es decir, si por lo que sea la query de la url lleva dos campos que dependen el uno del otro, el que uno indique una cosa no implica que el otro sea correcto o esté dentro de un rango esperado o lo que sea, es decir que todo lo que te llega del usuario tienes que comprobarlo: por ejemplo si esperas un numero entero usa las funciones para asegurarte de que realmente es un numero entero, no hagas calculos con lo que te llegó de fuera esperando que lo que no tenga sentido será rechazado por la propia bdd.


"...¿Como se que mi código no arroja warnings? He probado ciertas acciones que pudiera hacer un usuario pero nunca me ha dado un warning...¿Cuando suele salir? ..."

Esto va ligado con lo anterior, suele salir cuando estas trabajando con datos del usuario: puedes esperar que el usuario envie un dato determinado que pide p.ej. un formulario, pero no puedes estar seguro. En el php.ini se pueden habilitar o deshabilitar el volcado de errores (de todos los tipos, que hay varios), y en tu propia pagina puedes poner un ini_set para ocultar los errores (no se recomienda). Hay gente especializada en hacer saltar esos errores, que les proporcionan informacion util; si has estado probando lo mas habitual y todo va bien es que seguramente no deberías tener ningun problema.

Aun así es importante que escribas tu php con el manual de referencia abierto para conocer los valores de retorno de las funciones de php, y ante cualquier duda apliques los condicionales para saber si la funcion se ejecutó correctamente. Un ejemplo de buena practica lo tienes en tu propio codigo que colgaste en las lineas de la consulta a la bdd, donde terminan con 'or die()', la idea es correcta, solo que en caso de error la presentacion de la pagina finaliza en ese punto (como si quedara cortada). Dependiendo del diseño que tangas puede quedar poco profesional, esto depende de ti. Puedes solucionarlo comprovando manualmente el retorno de la funcion de query.


"...Leí hace tiempo creo recordar que los datos de acceso a la base de datos se encriptaban de manera automática..."

Si, los de la tabla de usuarios propia de mysql se encripta por defecto pero todo lo demas si no le dices nada no encriptará nada, pero la tabla mysql.users no es la de los usuarios de tu sitio sino la de todos los accesos a toda la bdd, es decir que si hay algun problema en eso será competencia de los que te alojaron el sitio web y temproporcionaron acceso a una bdd (con soporte para php, ftp, cuentas de correo y no se que mas, es decir que esa encriptacion que viene por defecto a ti directamente no te preocupa porque no la puedes corregir). Por lo de ver el codigo de tu pagina, si el servidor soporta php no podras bajarte el codigo fuente de los php pero si del html resultante (eso con un cliente http o navegador).

En cambio hay algunas funciones utiles para encriptar datos, como las passwords de los usuarios que se registren a tu sitio. Con un MD5 nadie podrá conocer el password de ningun usuario (ni siquiera tu accediendo a la bdd) porque no hay forma de desencriptar el md5. Esta encriptacion ya te habras dado cuenta que solo vale cuando no quieres desencriptar nada (solo vale en validaciones de usuario, etc..), con lo que si quieres encriptar algo y que luego te sea util tendras que usar otras funciones. Algunas puefdes tenerlas en php, otras te las proporciona la propia MySQL. Tendrias que buscar algun manual para todo esto y decidir que es lo que te conviene.

Por defecto el servidor de mysql solo provee aceso a localhost (es decir al servidor donde tienes alojado tu php), por lo que desde casa ningun atacante podria acceder a la bdd (como norma general, eso no significa que tal vez no sea imposible). Lo otro es lo de las inyecciones, que con eso si que puedes modificar alguna cosa. Para ello te comenté lo del escapado de caracteres. Recuerda que el manual de inyecciones es para comprovar y mejorar la seguridad de tu propio sitio, no para aplicarla a otros.

Un resumen: por norma general el 90% de la genta que visitará tu sitio no se molestará en modificar urls ni en ver el codigo fuente, el 9% puede que modifique la url para ver que pasa y el 0.999% puede que incluso intenten una inyeccion en el campo 'selectapar' (que es el filtro que usas directamente en la bdd). Para controlar esos accesos con controlar los errores, los datos que envia el usuario, los retornos de las funciones y los datos que envias a la bdd tienes mas que suficiente. Para el 0.001% a menos que seas el jefe de programacion de una multinacional creo que no deberías preocuparte, o si, eso depende de ti (tendrias que comenzar cambiando a https, echale un vistazo y veras si te sale rentable). Ojo, esto no tiene ninguna base solida y los % me los he inventado; si tienes una web de moda recien instaurada, cuantos jaquers crees que dejaran de interesarse por facebok o por instagram para intentar modificar los colores de tu productos? La seguridad de un sitio depende de lo que maneje el sitio, y esto tienes que valorarlo tu mismo pero siempre teniendo presente que debes aplicar lo basico (lo que te he compentado varias veces: comprobar errores, datos que te llegan por url, datos que envias a la bdd, etc).

Saludos
vosk