Programando de una db segura con PHP [Duda]

Iniciado por dimitrix, 29 Marzo 2010, 19:17 PM

0 Miembros y 1 Visitante están viendo este tema.

dimitrix

Mi pregunta es:

¿Cual es la mejor forma de controlar que no te la 'intenten colar' en un formulario?

Yo había pensando en un archivo por ejemplo 'limpieza.php' e importarlo cada vez que use el SQL con una función que limpie la variable.

Otra opción creo que era algo como escapar caracteres HTML.

¿Cual es la mejor opción?




Nakp

la mejor opcion desde un principio es usar mysqli o PDO con prepared statements y nunca filtraras una variable ;)

la segunda opcion es simplemente escapear todo con mysql_real_escape_string()

por ultimo al imprimirlo siempre utilizar htmlentities() si no quieres imprimir codigo para que sea interpretado por el navegador :P
Ojo por ojo, y el mundo acabará ciego.

^Tifa^

Puedes implementar lo que solicitas a nivel de lenguaje de programacion o a nivel de Base de datos.

A nivel de programacion, tienes por ejemplo lo que recomienda Napk.... (habran mas a lo mejor, pero no es mi area  ;) )

A nivel de base de datos, puedes dar uso de procedimientos almacenados, limitar cuales clausulas utilizara el usuario por defecto para la base de datos, puedes inclusive usar herramientas extras como MySQL Proxy (Esto es una aplicacion que ofrece la empresa de MySQL luego SUN y ahora Oracle ya que Mysql es de Oracle  :xD ) esta herramienta, es especifica para filtrar todo lo que llega ya que la consulta pasa por esta antes de llegar al motor de MySQL (Esta herramienta la desarrollo MySQL para evitar los SQL Injections segun..) Tambien tienes otra herramienta llamada GreenSQL que haria lo mismo....

Pero a nivel de DB, nada mejor que los procedimientos almacenados o funciones (siempre y cuando no quieras dar uso de aplicaciones extras)

dimitrix





Nakp

ten en cuenta que los procesos almacenados no puedes utilizarlos si no usas PDO o mysqli (no funciona con el driver tradicional) y consecuentemente es mucho mas logico y comodo (desde el punto de vista del programador) e igual de seguro, utilizar las sentencias preparadas :P

ambas opciones que to doy son anti sqli :xD
Ojo por ojo, y el mundo acabará ciego.

^Tifa^

No funciona PHP con los procedimientos almacenados con el modulo tradicional  :-X 

De esto no tenia constancia... en Perl al menos con su modulo DBI::Mysql funciona tanto tipo consulta SQL como si llamaras un procedimiento con la clausula CALL (sigue siendo una consulta SQL aunque llames un procedimiento en vez de pasar la consulta completa escrita).

Me gustan los procedimientos porque todo el trabajo lo hace el motor, por ende si tienes alguna falla en tu codigo que puedan traspasar y colarse al motor MySQL, quedara mas dificil vulnerar este si todo se maneja por procedimientos.... podria tambien implementar el las dos cosas, proteccion por codigo y por DB

Nakp

jeje es por algo que ese modulo esta siendo deprecado en php 5.3 y obsoleto en php6... ademas de no soportar otro millar de cosas y ser mas lento que las otras opciones mencionadas xD
Ojo por ojo, y el mundo acabará ciego.

dimitrix





дٳŦ٭

Insisto, no es mala onda pero no estabas muerto?, eso solo duda...

Y 2, leete los post con chincheta, ahí puse algo que te ayudará.


Con sangre andaluza :)