Foros del Web » Programando para Internet » PHP »

No inmersión de variables en $_GET

Estas en el tema de No inmersión de variables en $_GET en el foro de PHP en Foros del Web. Cómo coger eficientemente tus variables de $_GET y desestimar otras variables de possibles ataques con inmersion de variables. Yo uso esto pero me parece poco ...
  #1 (permalink)  
Antiguo 09/01/2004, 11:19
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 20 años, 10 meses
Puntos: 0
No inmersión de variables en $_GET

Cómo coger eficientemente tus variables de $_GET y desestimar otras variables de possibles ataques con inmersion de variables.

Yo uso esto pero me parece poco eficiente:
Código PHP:
$variable=Array('ruta','nombre','tipo');
foreach (
$_GET as $key=>$val) {
    if (
in_array($key,$variable$rev[$key]=$val
}
extract($rev,EXTR_PREFIX_ALL,'get_'); 
Todas las variables se crearan cómo: $get_ruta, $get_nombre,$get_tipo.

Se puede mejorar, o hay algunas cosas que es mejor que no haga? Que opinion os merece?
  #2 (permalink)  
Antiguo 09/01/2004, 11:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Pues usando -sólo- los arrays superglobales $_GET .. $_POST .. etc (según el método esperado) y con la directiva de tu php.ini : register_globals a OFF

Lo que estás haciendo con esa función es "globalizar" esas variables .. cuando lo segúro es acceder a la variable dentro del array asocitivo "superglobal" que trae cada una:

$_GET['variable']

Y así la usas con tus isset() o empty() para ver si está definida (y en ese método) .. y/o la comparas con su valor esperado/usas en general.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 09/01/2004, 11:59
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 20 años, 10 meses
Puntos: 0
Yo siempre complicandome la vida, lo que he pensado es que si por algun motivo cambiaran la configuracion de $GET, yo sólo tendria que modificar una linia, en cambio si accederia a los valores de las variables con $_GET['variable'] tendria que hacer muchissimos cambios. Que pegas tengo de hacerlo cómo lo hago?

No uso nunca isset() o empty(). Pongo directamente:
if($_GET['variable'] {
esto;
}
Puedo tener algun problema?
  #4 (permalink)  
Antiguo 09/01/2004, 12:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
El problema de "globalizar" tus variables es que .. un nombre de variable $tal .. podría ser suplantado si usas register_globals a ON donde todas las variables son globales .. así que por ejemplo:

nose.php?variable=valor

en el script PHP seria: $variable (con register_globals a ON) .. A OFF esa directiva se fuerza a que tenga que entrar dicha variable por su método esperado (en el ejemplo del link sería GET).

Si tu haces que $_GET['variable'] sea $variable (o aunque hagas $prefijo_variable .. Si yo veo tu código y averigüo que usas esa sintax .. podría llegar a comprometer la seguridad de tus scripts accediendo (insisto en configuraciones "register_global a ON") segùn lo descrito.

---

El hecho de usar esas funciones como isset() .. o empty() te asegura que la variable esté definida (caso de isset()) y/o definida+valor != NULL,'' (caso de empty()) ...

Si usas configuración de aviso de reportes de errores tipo:

error_reporting(E_ALL);

(al principio de tus scripts .. o bien en una configuración de php.ini en su directiva asociada) ..

Veraras que .. ahí PHP te saltará con un "Notice" avisandote de que tal variable no está definida (caso de un $_GET['variable'] )

----

Las justificaciones que comentas sobre la configuración de "get" .. Te comento que la directiva famosa register_globals si está a ON (para versiones superiores de php a 4.1.0) igual recoge los arrays asociativos $_GET ..etc y funcionaría más seguara la aplicación si lo usases a OFF. Es decir .. para versiones superiores de 4.1.0 en adelante no hay problema de incompatibildad (si hacia abajo).


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 09/01/2004, 12:52
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 20 años, 10 meses
Puntos: 0
Siempre uso register_global= OFF.
La configuración de mi php.ini en cuanto a errores es: error_reporting = E_ALL & ~E_NOTICE.

Conclusiones:
- Mejor poner: error_reporting = E_ALL ( Para una buena programación, inicialización, menos errores).
- Siempre usar $_GET['variable'] si register_globals=ON;
- Se puede globalizar $_GET (checkeando antes nuestras variables) si register_globals=OFF;

Pregunta:
Si cambias el nombre de un parametro en una llamada GET. Tendras que cambiar este nuevo nombre por el viejo, en cambio gloablizando, sólo el cambio se efectua en una linia. No es mejor, teniendo en cuenta que register_global esta en off?
  #6 (permalink)  
Antiguo 09/01/2004, 13:01
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 20 años, 10 meses
Puntos: 0
Usando el código anterior uno no tiene que preocuparse si register_gloabals esta en off o en on.

Por cierto modificando un poco el código, podrias saber si te estan haciendo un ataque por inmmersión de varibles.

$variable=Array('ruta','nombre','tipo');
foreach ($_GET as $key=>$val) {
if (in_array($key,$variable) $rev[$key]=$val;
else {
mail('[email protected]','Ataque inmersion GET,'$_GET $_SERVER');
exit;
}
}
extract($rev,EXTR_PREFIX_ALL,'get_');

Podria ser algo por el estilo.
  #7 (permalink)  
Antiguo 09/01/2004, 13:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
mm Y no es lo mismo:

$_GET['algo']

que ...

$get_algo

?¿ .. Es decir .. si cambio (bajo tu estructura y "globalización" que usas) .. la variabel (paràmetro) "algo" .. por "nose" .. igual voy a tener que ir a tooodo el código que use "algo" para cabiar por "nose" .. ya sea $get_nose .. o $_GET['nose']

Yo .. la verdad .. si ya tengo como recurso consumido a los arrays $_GET .. etc .. no me molesto en aplicar un proceso (tiempo+recursos en general) para "duplicar" otra vez variables.

En fin ..si tu le ves utilidad .. usalo.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 09/01/2004, 13:19
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 20 años, 10 meses
Puntos: 0
Si, me he precipitado, tienes toda la razón. Se tendran que hacer los mismos cambios, y tendras dublicidad de valores en variables, que realmente puedes borrar pq estan duplicados..

Ok, usaré directamente el $_GET['variable']. Me has convencido del todo.
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 21:52.