Foros del Web » Programando para Internet » PHP »

Seguridad en el paso de variables

Estas en el tema de Seguridad en el paso de variables en el foro de PHP en Foros del Web. Hola que tal? Bueno, abro este tema para, mas que nada, poder sacar una conclusion definitiva a esto. El tema es simple: Yo tengo un ...
  #1 (permalink)  
Antiguo 04/11/2009, 13:51
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Seguridad en el paso de variables

Hola que tal?

Bueno, abro este tema para, mas que nada, poder sacar una conclusion definitiva a esto.
El tema es simple: Yo tengo un formulario, lo completo, y luego lo submito asi guardo la informacion en la BD. Eso esta claro, la cosa se complica cuando yo tengo que dar seguridad a las variables, no quiero que me hagan SQL Inyection, y quiero tener la tranquilidad de que uso el metodo mas efectivo para no tener ningun "owned" en cualquier sitio que desarrolle.

He leido muchos articulos, incluso de este mismo Foro, el cual hablan de esto, pero siempre me encuentro con respuestas diferentes. Veo muchas funciones de por medio:

- htmlentities
- htmlspeciachars
- addslashes
- get_magic_quotes_gpc
- trim
- mysql_real_escape_string
- sprintf

De mi parte, al tomar una variable hago lo siguiente:

Código PHP:
$nombre htmlspecialchars(trim(mysql_real_escape_string($_POST["variable"]))); 
Y para hacer cualquier consulta uso siempre sprintf.

Código PHP:
$query sprintf("SELECT * FROM tenistas WHERE nombre='%s'",$nombre); 
Yo no se si sea lo correcto, es lo que lei en muchos sitios, pero me gustaria interiorizarme mas en esto, y tratar de afianzar mis conocimientos.

Me pueden dar una recomendacion? Estare muy agradecido de verdad.

Saludos.
  #2 (permalink)  
Antiguo 04/11/2009, 14:01
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Seguridad en el paso de variables

En realidad usando mysql_real_escape_string, estas evitando el sql inyection. htmlspecialchars lo que hace es convertirte los caracteres de especiales. Te sugiero mejor usar mysql_real_escape_string solo y cuando vayas a mostrar en la pagina usar htmlentities para convertir todos los caracteres especiales. Así cuando vayas a hacer una busqueda en la base de datos, busques conforme a como el usuario ingreso en ella y no busque con los caracteres convertidos.
__________________
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 04/11/2009, 14:07
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Seguridad en el paso de variables

Yo, en una web de noticias que hice. Al subir una noticia no podia usar mysql_real_escape_string porque me convertia las comillas en otra cosa (que no me acuerdo ahora mismo).

Tenia que pasar sin ninguna funcion las variable (por decir un ejemplo $cuerponoticia = $_POST["cuerponoticia"]).
Que es mejor usar en estos casos? Que esa funcion de mysql queda invalidada.

Saludos.
  #4 (permalink)  
Antiguo 04/11/2009, 14:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Seguridad en el paso de variables

te sugiero busques en Internet: SQL Injection

es un tema algo amplio, bien conocido... pero ciertamente el uso de un centenar de funciones no deja que el verdadero conocimiento se afirme...

porque en realidad es algo muy sencillo: la posibilidad de que nuestro SQL resulte corrupto y se ejecuten o introduzcan valores indebidos...

hay muchas formas de corromperlo, si no somos precavidos no solo al recibir las variables, no solo al tratarlas, inclusive, desde el momento en que no pensamos que sea posible por ser simple..

"...el error mas común es pensar que el error mas común no se va a dar..."

si pides un dato numérico para cualquier fin, que así sea... un e-mail, filtralo... ¿un nick??

etc, etc... supongo que investigando y leyendo aprenderás mas, suerte!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 04/11/2009, 14:12
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Seguridad en el paso de variables

Tendrias que verificar si tienes activado magic_quotes_gpc en el php.ini. Si es así, desactivalo, ya que te trata de escapar las comillas automaticamente. Se recomienda que lo tengas desactivado. Ahora, ¿que error te indicaba al intentar usar mysql_real_escape_string?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 04/11/2009, 14:18
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 14 años, 6 meses
Puntos: 265
Respuesta: Seguridad en el paso de variables

abimaelrc, lo que te cuento es una anecdota. Yo me acuerdo que hice una web de noticias deportivas. Y en una noticia, por ejemplo, se ponia el comentario de un Deportista....entonces generalmente esos comentarios se ponen entre comillas.
El tema es que cuando yo escribia ese texto, y lo subia a la base de datos, me convertia las comillas en barras (no se si "/" o "\") ... dejandome el texto escrito de manera incorrecta, y yo, sacando mysql_real_escape_string, dejaba todo funcionando correctamente, pero con esa vulnerabilidad .... entonces te preguntaba si habia otro metodo para solucionar mi problema q no sea ese "parche" que hice.

Y si, pateketrueke, es algo que la verdad da muchas soluciones distintas, pero vos que usas? En realidad me gustaria saber que usan otros usuarios, como para tener una mejor perspectiva. Yo ya mostre que uso, y ya aprendi q usando mysql_real_escape_string me ahorro escribir todo eso jaja.

y magic_quotes_gpc lo tengo que tener en cuenta siempre? Porque en mi servidor lo puedo tener desactivado, pero si en otro servidor lo tengo activado que?

Saludos y gracias.
  #7 (permalink)  
Antiguo 04/11/2009, 14:28
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Seguridad en el paso de variables

Lo recomendable de magic_quote_gpc es tenerlo desactivado, ya que PHP6 va a removerlo. Uno debe ir acostumbrandose a no usarlo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
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 04:12.