Foros del Web » Programando para Internet » PHP »

Impedir SQL inyection, pero permitir HTML...

Estas en el tema de Impedir SQL inyection, pero permitir HTML... en el foro de PHP en Foros del Web. Hola gente: Me ha entrado una duda inmensa. Hasta hoy lo que hacia en mi panel (para subir noticias y demas) era reemplazar las <, ...
  #1 (permalink)  
Antiguo 01/10/2005, 15:38
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
Impedir SQL inyection, pero permitir HTML...

Hola gente:

Me ha entrado una duda inmensa.

Hasta hoy lo que hacia en mi panel (para subir noticias y demas) era reemplazar las <, > y " por su respectivo codigo HTML, con ello evitaba algunas inyecciones de codigo malintencionado.

La duda me surgio ahora que necesito, obviamente, impedir la inyeccion de codigo pero, a su vez, permitir codigo HTML.

Obviamente ya no puedo reemplazar etiquetas como < y >, o utilizar funciones que habitualmente usamos para para convertir html a texto "plano"...

Si alguien me da una mano se lo agradeceria mucho...

PD: Pido perdon si ya se trato este tema... utilice el buscador pero no encontre una consulta similar... (si de SQL inyection)
__________________
I Love Programming...
  #2 (permalink)  
Antiguo 01/10/2005, 15:42
 
Fecha de Ingreso: octubre-2004
Mensajes: 751
Antigüedad: 19 años, 6 meses
Puntos: 4
Puedes usar la funcion htmlentities() y luego cuando sacas la información de la base de datos usar html_entity_decode() que es la función opuesta a htmlentities.

Más información en www.php.net/html_entity_decode

Saludos,
__________________
sergiold
  #3 (permalink)  
Antiguo 02/10/2005, 00:58
Avatar de Master Solution  
Fecha de Ingreso: octubre-2005
Mensajes: 51
Antigüedad: 18 años, 6 meses
Puntos: 1
Primero que nada, SQL Injection no tiene nada que ver con la inyeccion de codigo HTML.

Si queres evitar inyecciones SQL, podes usar addslashes(), siempre igual te conviene chequear que el servidor no lo este haciendo automaticamente, con la funcion get_magic_quotes_gpc().

Para evitar HTML Injection, podes usar como dijeron arriba la funcion htmlentities(), pero si despues usas html_entity_decode() las devolves a su estado natural, por lo que vas a ser vulnerable.

Tambien podes usar htmlspecialchars(), que creo que es mas conveniente, ya que htmlentities() tambien te va a convertir los acentos, y demas.

Pero para tu caso, que queres permitir HTML, pero evitar la inyeccion de codigo, creo que lo mejor seria que uses la funcion strip_tags(), pasandole como parametro, los tags que SI queres que esten permitidos.

Ejemplo:

Código:
strip_tags($texto, '<b>')
Pero igual tampoco es tan seguro, porque pueden tener tags anidados, y esta funcion no realiza una comprobacion muy exausta.

Asi que, como recomendacion, usar bbcode. O sino chequeate este script, realmente yo no lo uso, pero recien hice un par de pruebas y parece bueno.

http://pixel-apes.com/safehtml
__________________
-=[ 3KLabs ]=-
-=[ Diseño - Programación - Desarrollo ]=-
-=[ Posicionamiento en Buscadores ]=-
-=[ Hosting de Calidad ]=-
  #4 (permalink)  
Antiguo 02/10/2005, 09:15
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
sergiold, utilizare lo que tu dices de hacer un htmlentities() y luego html_entity_decode().

Master Solution, ¿en que momento mencioné que Inyección SQL fuera lo mismo que inyección HTML?

Por otra parte, no hay alguna funcion estilo strip_tags($texto, '<b>') pero que haga LO CONTRARIO, es decir, permitir todos los tags, menos los que especifiquemos... creo que sería mas conveniente puesto que, como en mi caso, solo deseo descargar etiquetas como "<head>", "<body>", etc...

Saludos y gracias por todo.
__________________
I Love Programming...
  #5 (permalink)  
Antiguo 02/10/2005, 11:06
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 9 meses
Puntos: 4
si permitis html es porque confias en el que envia el texto, y si confias ni hace falta no permitir ciertos tags..
__________________
Internet Explorer SuckS
Download FireFox
  #6 (permalink)  
Antiguo 02/10/2005, 11:13
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
El tema es que, como dices, confio en quien va a subir el HTML, pero no estoy seguro de su conocimientos sobre HTML.

Entonces quizas quiera solamente hacer una tabla, pero como no sabe usar <table><tr><td>....</td></tr></table>, decide utilizar algun editor al estilo FrontPage y luego copie TODO el HTML en lugar de solo las tablas...

Igualmente esto puedo eliminarlo con expresiones regulares...

Saludos.
__________________
I Love Programming...
  #7 (permalink)  
Antiguo 02/10/2005, 11:20
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 9 meses
Puntos: 4
podes armar unos botoncitos para insertar html como hice yo, salvo q solo hice para cosas muy comunes como links, imagenes, negrita, cursiva y listas. si queres el code te lo paso.

pd: podes tutearme, pronto voy a mudarme a don torcuato :P
__________________
Internet Explorer SuckS
Download FireFox
  #8 (permalink)  
Antiguo 02/10/2005, 11:30
Avatar de Master Solution  
Fecha de Ingreso: octubre-2005
Mensajes: 51
Antigüedad: 18 años, 6 meses
Puntos: 1
Entonces usa safeHTML, te permite cualquier tag HTML, menos cualquier cosa que no sea segura.

http://www.pixel-apes.com/safehtml/

Creo que es lo mejor, y ademas lo de los botones, tambien le puede servir al usuario.
__________________
-=[ 3KLabs ]=-
-=[ Diseño - Programación - Desarrollo ]=-
-=[ Posicionamiento en Buscadores ]=-
-=[ Hosting de Calidad ]=-
  #9 (permalink)  
Antiguo 02/10/2005, 16:10
Avatar de FuLaNo_  
Fecha de Ingreso: mayo-2003
Ubicación: Don Torcuato, Buenos Aires, Argentina
Mensajes: 1.250
Antigüedad: 20 años, 11 meses
Puntos: 2
Si si, lo de los botones esta, de hecho, lo que estoy haciendo es justamente un panel administrativo bastante "grafico" para que el usuario inexperto no se pierda; en el mismo panel tiene la opcion de escribir BBCode o HTML. Despues cuando lo termine (version 1.01 casi toda en xhtml 1.1) subo algunas imagenes....

SIR, bienvenido al barrio!, por que calles te mudas?
__________________
I Love Programming...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:07.