Foros del Web » Programando para Internet » PHP »

Seguridad con PHP y sus comillas

Estas en el tema de Seguridad con PHP y sus comillas en el foro de PHP en Foros del Web. Buenas de nuevo, Estoy revisando mis librerias y webs para mejorar la seguridad. De primeras lo que hago es al principio del index.php de cada ...
  #1 (permalink)  
Antiguo 06/08/2009, 05:10
 
Fecha de Ingreso: marzo-2004
Mensajes: 283
Antigüedad: 20 años, 8 meses
Puntos: 2
Seguridad con PHP y sus comillas

Buenas de nuevo,
Estoy revisando mis librerias y webs para mejorar la seguridad. De primeras lo que hago es al principio del index.php de cada web aplicar este script para evitar posibles inyecciones de sql:

Código:
array_map('mysql_real_escape_string',$_GET);
array_map('mysql_real_escape_string',$_POST);
Luego aplico también strip_tags() en los formularios para evitar que me cuelen html. Quería preguntaros dos cosas:

1- tras aplicar estas dos capas de seguridad, hay algo que no me gusta, y es que si alguien en un textarea escribe un texto en el que aparezcan comillas simples o dobles, al guardarlo en bases de datos estas aparecen con una barra por delante. Cual es la manera correcta de tratar entonces un texto de un textarea para que no pase esto y que a la vez no ponga en peligro la web?

2- Creeis que estos dos pasos son suficientes para tener una recepción segura de datos llegados por formularios? Y que ocurre con el array $_Files? Independientemente de que mis scripts validen la extensión de los archivos, es necesario tambien aplicarle algo parecido a 'mysql_real_escape_string'?

Muchas gracias compañeros.
  #2 (permalink)  
Antiguo 06/08/2009, 07:33
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Seguridad con PHP y sus comillas

1. Verifica que no tengas activado magic_quotes_gpc en tu php.ini

2. En los archivos que pasan por la variable $_files no se necesita verificar con mysql_real_escape con verificar el tipo de archivo es suficiente.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 06/08/2009, 08:31
 
Fecha de Ingreso: marzo-2004
Mensajes: 283
Antigüedad: 20 años, 8 meses
Puntos: 2
Respuesta: Seguridad con PHP y sus comillas

Hola abimaelrc,
acabo de comprobarlo y efectivamente estas activadas las magic_quotes_gpc. Por lo que se, esta opción añade una barra invertida delante de cada comilla (sea doble o simple) y esa también es una de las cosas que hace la funcion mysql_real_escape_string. Quiero decir que si lo que intentas es decirme que desactive las magic_quotes_gpc, la barra invertida me seguira saliendo debido a la funcion mysql_real_escape_string, y si esta también la desactivo pongo en peligro la seguridad de mi sitio. Entonces cual es la forma correcta para mantener la seguridad de la web y que las comillas que se encuentren dentro de un texto se mantengan si estas no estan escritas con motivos malignos? Gracias

Última edición por SubZero_mb; 06/08/2009 a las 08:53
  #4 (permalink)  
Antiguo 06/08/2009, 08:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Seguridad con PHP y sus comillas

Cuando estan activadas las magic_quotes automaticamente se agregan los \ a las comillas y barras, por lo que causa ese problema que veas \ en el registro, debes de comparar usando algo asi:
Código PHP:
Ver original
  1.       array_map('mysql_real_escape_string',$_GET);
  2.       array_map('mysql_real_escape_string',$_POST);
  3. }

Aunque lo más recomendable es tenerlas desactivadas y no confiar en eso ya que en PHP6 ya no existe esa directiva y la función get_magic_quotes_gpc ya no existe.

Saludos.
  #5 (permalink)  
Antiguo 06/08/2009, 08:57
 
Fecha de Ingreso: marzo-2004
Mensajes: 283
Antigüedad: 20 años, 8 meses
Puntos: 2
Respuesta: Seguridad con PHP y sus comillas

Vaya GatorV, contestaste a la par que editaba mi mensaje.
Como he puesto en el comentario editado, si ahora desactivo las magic_quotes voy a seguir teniendo la barra delante de las comillas, porque eso es una de las cosas que hace la función mysql_real_escape_string, entonces sigo un poco en las mismas, me explico? Puedo desactivar las magic_quotes, pero mysql_real_escape_string seguira añadiendo barras al texto si este tiene comillas.
  #6 (permalink)  
Antiguo 06/08/2009, 09:20
Avatar de JoseAlejandro_Realza  
Fecha de Ingreso: agosto-2008
Ubicación: Maracay - Venezuela
Mensajes: 192
Antigüedad: 16 años, 3 meses
Puntos: 2
Respuesta: Seguridad con PHP y sus comillas

Si Deseas Guardar El Texto Tal Como Lo Ingrese El Usuario, Podrias Utilizar Cualquier Sistema de WYSIWYG. Podrias Buscarte En Google Hay Muchisimos, Por Ejemplo FCKeditor, TinyMCE, FreeRichTextEditor, Entre Otros.
__________________
Tu Guía Empresarial http://www.empresarial.org.ve Soluciones Empresariales

Atte: José Alejandro Realza
  #7 (permalink)  
Antiguo 06/08/2009, 09:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: Seguridad con PHP y sus comillas

Claro las va a agregar, pero al enviarlas a MySQL ya vas a ver la comilla sin la barra, solo sirve para escapar la comilla dentro del string en PHP.

Saludos.
  #8 (permalink)  
Antiguo 07/08/2009, 03:12
 
Fecha de Ingreso: marzo-2004
Mensajes: 283
Antigüedad: 20 años, 8 meses
Puntos: 2
Respuesta: Seguridad con PHP y sus comillas

Pero GatorV, si yo recibo los datos por $_GET por ejemplo, y el valor de este dato es:

Código:
Este es el "nuevo" coche del Pepe's colection
El script PHP recibe el valor y lo trata mediante la función mysql_real_escape_string, que convertira esa cadena en:

Código:
Este es el \"nuevo\" coche del Pepe\'s colection
Y el siguiente paso es introducir en la consulta a base de datos esa nueva cadena, por lo que al final el valor introducido en las bases es el de la cadena con barras delante de las comillas, me explico? Y yo lo que quiero saber es como introducir el valor en las bases de datos de manera correcta, con sus comillas sin barras, pero que ala vez no ponga en peligro la seguridad de la web. En definitiva. cual es el uso correcto de mysql_real_escape_string. Muchas gracias

Última edición por SubZero_mb; 07/08/2009 a las 03:18
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 22:05.