Foros del Web » Programando para Internet » PHP »

Duda sencilla con GET

Estas en el tema de Duda sencilla con GET en el foro de PHP en Foros del Web. Hola a todos, foreros! Mi duda es bien sencilla pero me pierdo muchiisimo en este tema. Os cuento: me llega por GET un nombre y ...
  #1 (permalink)  
Antiguo 06/11/2010, 20:33
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Duda sencilla con GET

Hola a todos, foreros!
Mi duda es bien sencilla pero me pierdo muchiisimo en este tema.

Os cuento: me llega por GET un nombre y tengo que ver si ese nombre existe en la BD, ¿que funciones utilizo para filtrar ese valor?

Muchas gracias.
  #2 (permalink)  
Antiguo 06/11/2010, 20:39
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Duda sencilla con GET

imagino que trabajas con mysql , sabes recibir el dato?? si es asi entonces ve este link y busca en google consulta con condicion ya que informacion sobre lo que necesitas hay bastante saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #3 (permalink)  
Antiguo 06/11/2010, 20:48
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Duda sencilla con GET

Me as entendido mal, seleccionar los datos y todo eso no tengo ningun problema.
Yo lo que quiero es filtrar el dato que me viene por GET, para la seguridad de la pagina, para evitar Inyection SQL, etc., entendiste?
  #4 (permalink)  
Antiguo 06/11/2010, 20:48
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 15 años
Puntos: 322
Respuesta: Duda sencilla con GET

Puedes hacer asi;
Código PHP:
$id $_GET['id'];
$query mysql_query("SELECT * FROM tabla WHERE id='$id'"); 
Ahora, si buscas que se introduzca en GET un numero y no letras,
puedes evitar esto para evitar SQL Injection;
Código PHP:
$id $_GET['id'];
if (!
is_numeric($id)) {
echo 
'El ID debe ser numerico';
}else{
$query mysql_query("SELECT * FROM tabla WHERE id='$id'");

Saludos!
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #5 (permalink)  
Antiguo 06/11/2010, 20:53
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Duda sencilla con GET

Colapso de mensajes a la misma hora, jeje.
Se que hay muchas funciones: htmlentities(), adslashes(), etc, etc, etc
Mi problema es que no se como utilizarlas en este caso ¿cuales utilizo y cuales no?
  #6 (permalink)  
Antiguo 06/11/2010, 20:58
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Duda sencilla con GET

bueno seria bueno que usaras mysql_real_escape_string en tu consulta cuando pases los datos tanto por get como post, tambien intenta hacer validaciones de datos para estar seguro que te estan pasando lo que deseas saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #7 (permalink)  
Antiguo 06/11/2010, 21:02
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 15 años
Puntos: 322
Respuesta: Duda sencilla con GET

Mira, todo depende de que valores quieras recibir en $_GET
Ahi te puse por ejemplo la unica funcion que ocupas si requieres numeros.. Pero si requieres letras, existen diversas funciones como;

Htmlentities - Si se introducen caracteres como < o >, se modifica por su entidad HTML para evitar XSS Injection
Adslashes - MUY importante para evitar SQL Injection, ya que si se introducen comillas (simples o dobles), la funcion antepone barras invertidas para anular las comillas
Por ejemplo, si tengo una consulta de este tipo;
Código PHP:
$pass $_GET['pass'];
$q mysql_query("SELECT * FROM usuarios WHERE pass='$pass'"); 
Si yo intento hackear esa consulta con;
'or '1'='1
La consulta se anula automaticamente, quedando asi;
Código PHP:
$q mysql_query("SELECT * FROM usuarios WHERE pass='\'or \'1\'=\'1'"); 
Saludos!

PD; En php.net encontraras muchas explicaciones de cada funcion, date una vueltecita
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #8 (permalink)  
Antiguo 07/11/2010, 09:36
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Duda sencilla con GET

Muchas gracias, me lo mirare. El dato es una categoria de un producto, estonces lo que quiero comprobar es que esa categoria exista.

Otra cosilla, offtopic
Código PHP:
Ver original
  1. $q = mysql_query("SELECT * FROM usuarios WHERE pass=' 'or '1'='1'");
Esto que ocasionaria?
  #9 (permalink)  
Antiguo 07/11/2010, 12:42
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Duda sencilla con GET

pues deberias de saberlo se nota a leguas con ver la consulta ya que metas las pass que metas siempre va a devolver datos xq estas diciendo un valor verdadero enla condicion or
Cita:
or '1'='1'
revisa como puede afectar eso en la web hay bastante informacion de injeccion sql y lo que ocaciona saludos
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #10 (permalink)  
Antiguo 07/11/2010, 15:21
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 15 años
Puntos: 322
Respuesta: Duda sencilla con GET

Exacto, ahi le indicas a la query que saque todos los datos
de usuarios siempre y cuando pass sea vacio O 1 sea igual a 1..
Obvio que, como siempre 1=1, va a sacar TODOS los datos... Asi es como
funciona la sql injection mas o menos
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #11 (permalink)  
Antiguo 07/11/2010, 16:24
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Duda sencilla con GET

Sigo sin entenderlo, ¿cual es la finalidad de esa consulta?
¿sacar los datos de la fila en la que pass= x? o ¿comprobar si hay algun registro en esa tabla en la que pass coincida?

Última edición por mariomon17; 07/11/2010 a las 16:34
  #12 (permalink)  
Antiguo 07/11/2010, 16:53
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Duda sencilla con GET

?Otra duda: diferencia entre mysql_real_escape_string() y addslashes()
  #13 (permalink)  
Antiguo 07/11/2010, 16:56
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Duda sencilla con GET

hiciste la consulta?? ya que la colocas como ejemplo tu mismo?? que te devolvio???? lo que hace esa consulta es que siempre es true y te trae todos los datos de la tabla usuarios ya ahi te esta abriendo un hueco de seguridad ya que una de tus validaciones fue true por defecto, como te dije en la web hay informacion sobre la injeccion sql ahi te lo explicaran mejor mira este articulos, incluso los comentarios hay dos partes de este velo esta bueno habla sobre la seguridad con php ahi explican muy bien lo que preguntas
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #14 (permalink)  
Antiguo 07/11/2010, 16:59
Avatar de Sourcegeek
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: $mex['B.C.'];
Mensajes: 1.816
Antigüedad: 15 años
Puntos: 322
Respuesta: Duda sencilla con GET

Supongo que no hay diferencia... Pasate por el manual de php.net y compara;

http://php.net/mysql_real_escape_string
http://php.net/addslashes
__________________
Buscas desarrollador web? Sourcegeek. Diseño web, Maquetación y Programación
¡Escribe bien! Esto es un foro, no un Facebook para que escribas con los pies
  #15 (permalink)  
Antiguo 07/11/2010, 18:08
 
Fecha de Ingreso: noviembre-2009
Mensajes: 846
Antigüedad: 14 años, 5 meses
Puntos: 34
Respuesta: Duda sencilla con GET

Vale! Joo, me ha costado, ehh... jaja
Ya lo entendi, estaba dandole vueltas tontas :)
Gracias a los dos, de momento voy a utilizar esto
htmlentities(mysql_real_escape_string($_GET['categoria'])

aparte de en la BD crear un nuevo usuario con los permisos justitos.


Suficiente?

Etiquetas: sencilla
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:08.