Foros del Web » Programando para Internet » PHP »

Evitar que se modifiquen parametros en url

Estas en el tema de Evitar que se modifiquen parametros en url en el foro de PHP en Foros del Web. Me gustaría evitar que se pudieran introducir vía URL parámetros erróneos que permitieran recargar mi página con errores. Pongo un ejemplo: Si tenemos una página ...
  #1 (permalink)  
Antiguo 31/05/2011, 04:48
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Evitar que se modifiquen parametros en url

Me gustaría evitar que se pudieran introducir vía URL parámetros erróneos que permitieran recargar mi página con errores.

Pongo un ejemplo:

Si tenemos una página ficticia llamada forofosdelweb.com/index.php?id=foro-php, digamos que alguien modifica foro-php por foro-pph.

Entonces la página no se visualizaría bién...

Pues a mi me gustaría en esos casos desviar a una página error 404 o bien no permitir que se recargue mi página.

Mi idea era tan simple como crear una estructura de control de tipo condicional if y asignarle como condición unos valores posibles para el parámetro id, y entre llaves el resto de la página.

Digamos que sería como un interruptor.

¿Ideas? He visto que alguna página importante tipo ixquick.com encriptan la url y punto.

PD: Ya uso mysqli_real_escape_string() para escapar caracteres.
  #2 (permalink)  
Antiguo 31/05/2011, 04:57
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Evitar que se modifiquen parametros en url

Pues puedes hacer lo siguiente:

pongamos el siguiente caso:

mipagina.php?seccion=noticias&orden=titulo

Código PHP:
Ver original
  1. $secciones  = array('noticias','novedades','ofertas');
  2. $orden = array('titulo','nombre','fecha');
  3.  
  4. if(isset($_GET['seccion']) and in_array($_GET['seccion'], $secciones)) {
  5.  
  6. // continuo
  7.  
  8. } else {
  9.  
  10. //error 404 o.. cargo la seccion por defecto.. (la primera)
  11.  
  12. $seccion = $secciones[0];
  13.  
  14. }
es solo una idea.. pero ya ves que da juego y es cómodo

Un saludo!

}
  #3 (permalink)  
Antiguo 31/05/2011, 05:11
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Evitar que se modifiquen parametros en url

Cita:
Iniciado por miktrv Ver Mensaje
Pues puedes hacer lo siguiente:

pongamos el siguiente caso:

mipagina.php?seccion=noticias&orden=titulo

Código PHP:
Ver original
  1. $secciones  = array('noticias','novedades','ofertas');
  2. $orden = array('titulo','nombre','fecha');
  3.  
  4. if(isset($_GET['seccion']) and in_array($_GET['seccion'], $secciones)) {
  5.  
  6. // continuo
  7.  
  8. } else {
  9.  
  10. //error 404 o.. cargo la seccion por defecto.. (la primera)
  11.  
  12. $seccion = $secciones[0];
  13.  
  14. }
es solo una idea.. pero ya ves que da juego y es cómodo

Un saludo!

}
Vale perfecto, te has ganado tu karma.

Aunque también se podría hacer:

Cita:
if(isset($_GET['seccion']) and in_array($_GET['seccion'], $secciones)) {
CONTENIDO COMPLETO DE LA PÁGINA
}
Suponiendo que cada elemento HTML se introduce con un echo.
  #4 (permalink)  
Antiguo 31/05/2011, 05:59
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Evitar que se modifiquen parametros en url

Jajaja, muchas gracias!!

Si eso es cuestión de gustos, lo puedes hacer como quieras... yo soy de validar lo que no me gusta y luego abajo el resto..

Un saludo!
  #5 (permalink)  
Antiguo 02/06/2011, 00:44
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Evitar que se modifiquen parametros en url

Bueno ahora me está tocando implementarlo y me encuentro con algo que no había pensado...

Cada 2 x 3, estoy añadiendo nuevas filas a la tabla, por lo que cuando reviso los valores dados a los parámetros de las URL, está claro que no puedo usar una lista hecha a mano.

Este es el query que hago:

Cita:
$var1 = mysqli_real_escape_string($conexion, $_GET['var1']);
$var2 = mysqli_real_escape_string($conexion, $_GET['var2']);

$sql = "SELECT * FROM tabla WHERE campo1 = '$var1' && campo2 = '$var2' ORDER BY id ASC LIMIT 1, 10";

$query = mysqli_query($conexion, $sql);
Yo quiero lograr, que si no existe una correspondencia en la tabla (dado el query anterior "en negrita"), directamente se lance la página error 404.

Por ejemplo haría esto:

Cita:
if (!$query) {
echo "Error 404";
} else {
// Cargo la página entera
}
¿Lo anterior tendría sentido?, también se me ocurre algo como:

Cita:
if (isset($_GET['var1']) && isset($_GET['var2']) && $query==true) {
// Se carga la página
} else {
echo "Error 404";
}
  #6 (permalink)  
Antiguo 02/06/2011, 00:58
 
Fecha de Ingreso: julio-2008
Ubicación: Barcelona
Mensajes: 2.100
Antigüedad: 15 años, 9 meses
Puntos: 165
Respuesta: Evitar que se modifiquen parametros en url

Yo creo que sería mejor que hicieras un SELECT COUNT de la consulta en negrita, si esta te devuelve 1, entonces continuas, si no , muestras error 404.

Un saludo!
  #7 (permalink)  
Antiguo 06/06/2011, 21:01
Avatar de Gambinoh  
Fecha de Ingreso: diciembre-2010
Mensajes: 348
Antigüedad: 13 años, 4 meses
Puntos: 11
Respuesta: Evitar que se modifiquen parametros en url

Al final he aprovechado el query que uso para seleccionar las filas de la base de datos antes de imprimir los resultados, y he usado dos estructuras de control if (una anidada dentro de la otra).

La primera tiene como condición que no estén vacios los parámetros, y la segunda que existan coincidencias exactas en la base de datos.

Perdón por responder tan tarde, pero es que justo cuando iba a postear la respuesta detallada con todo el código, resulta que estaban traspasando la base de datos en FdW.

Etiquetas: parametros, url
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 14:29.