Algunas veces necesitamos usar las variables que nos llegan por GET o POST y necesitamos listarlas todas. O, en mi caso, cuando se hace la actualización de php 4 a php 5 algunas aplicaciones dejan de trabajar porque no tienen declaradas correctamente las variables . Por eso hice este sencillo script que aprovecha que las variables GET y POST vienen en un array y las declara con sus respectivos nombres y valores.
Código :
<? /***VARIABLES POR GET ***/
$numero = count($_GET); $tags = array_keys($_GET);// obtiene los nombres de las varibles $valores = array_values($_GET);// obtiene los valores de las varibles
// crea las variables y les asigna el valor for($i=0;$i<$numero;$i++){ $$tags[$i]=$valores[$i]; }
/***VARIABLES POR POST ***/
$numero2 = count($_POST); $tags2 = array_keys($_POST); // obtiene los nombres de las varibles $valores2 = array_values($_POST);// obtiene los valores de las varibles
// crea las variables y les asigna el valor for($i=0;$i<$numero2;$i++){ $$tags2[$i]=$valores2[$i]; }
/* ahora solo hay que llamar las variables por su nombre ej: http://misitio.com/estearchivo.php?usuario=cristalab&password=sangre
para verlas solo pones la variable por su nombre echo "nombre de usuario: ".$usuario."<br> password: ".$password;
en vez de usar $_GET['usuario'] y $_GET['password'] */
?>
Nota informativa:
PHP4 trabajaba por defecto el parametro register_globals="on" lo que significa que cuando usabas una variable por GET o POST solo la invocabas (ej: para mostrar la variable $usuario de un formulario solo ponias echo $usuario;).
PHP5 por el contrario usa el parametro register_globals="off" por defecto, como una medida de seguridad y eficiencia del codigo [ mas info ] (ej: para mostrar la variable $usuario de un formulario debes poner echo $_POST['usuario']; ). A pesar de los beneficios de este cambio, muchos scripts antiguos no toman en cuenta este asunto y pueden dejar de funcionar, para esos casos , ( y para que no te pase siquiera por la cabeza poner de nuevo register_globals en "on" !! ) es este script.
Las register_globals son un agujero de seguridad increíble. En el script basta con usar $_REQUEST para usar indistintamente variables $_POST y $_GET y no duplicar el algoritmo. Por:Antonio_blog
Antonio_blog :
En el script basta con usar $_REQUEST para usar indistintamente variables $_POST y $_GET y no duplicar el algoritmo.
¿Y si llega una variable del mismo nombre por GET y por POST? No serviría Por:Freddie
Muy buen sistema, me gusta. Podría haber algún agujero de seguridad incluso con globals en off? Por:Capt.Mahou_blog
Capt.Mahou_blog :
Muy buen sistema, me gusta. Podría haber algún agujero de seguridad incluso con globals en off?
Depende de como programes todo.
Con globals en on era facil hacer pasar una variable post por get o peor aun, una variable interna del sistema usando get. Ahora mismo, el problema más comun en la programación PHP es SQL Injection. Pero eso es de todos los lenguajes. Por:Freddie
Al mismo tiempo una variable por GET y por POST... a un mismo script... En el caso de que sucediera, no se se si es con qué tecnología, el script de arriba tampoco lo soluciona. Quedaría por defecto la enviada por POST. Por:Antonio_blog
Y no puede ser más sencillo esto?
if (!empty($_GET)) extract($_GET); if (!empty($_POST)) extract($_POST); if (!empty($_SERVER)) extract($_SERVER); Por:Capt.Mahou_blog
Hace mucho me paso esto y tuve que cambiar todas las variables del codigo fue muy engorroso porque yo no fui quien lo programo .
Ahora con estas notas me haces la vida más fácil.
Se agradece el aporte. Por:Otaku_ RzO_blog
Capt.Mahou :
Y no puede ser más sencillo esto?
if (!empty($_GET)) extract($_GET); if (!empty($_POST)) extract($_POST); if (!empty($_SERVER)) extract($_SERVER)
OMG, You win an Internet!!11! Por:John (Clab)_blog
php.net :
No use extract() en datos no confiables, como entradas de usuario ($_GET, ...).
mas info acerca de SQL inyection, en los comentarios de ese post
Max Inyeccion a SQL es otra cosa. No tiene que ver con lo que expone Siddharta o Capt.Mahou
Y para evitar la inyección a sql, lo mejor es validar todos los datos que vengan del cliente $_GET o $_POST con funciones basadas en regexp (olvidandote de is_numeric y demas) y estos los vaya a usar en una sentencia sql.
En fin, buen tip. Aunque en lo personal no me gusta registrar las variables globales. Por:Maikel
no soy experto en eso, pero acaso la inyeccion sql no hace uso, de entre otros del mal uso del recojo de variables mediantes globals=on Por:Max
Eh como digo la inyección a sql sucede por no validar bien los datos y puede ocurrir con register globals en on u off. Por:Maikel
MAs que nada necesito una definicion clara y concreta de lo que esl el _POST y de lo que es el _GET Por:Cesar_blog
Gracias!
Alguien ha tenido problemas de sesiones con firefox?
En una tienda (oscommerce) me ocurre que paso unas variables al sistema seguro del banco cambiando de url, cuando el banco me devuelve las variables y retorna a mi url se pierden la sesión y las variables. En IE no ocurre, y realiza el pedido con los datos asignados correctamente. Por:Sisco
Sisco :
Gracias!
Alguien ha tenido problemas de sesiones con firefox?
En una tienda (oscommerce) me ocurre que paso unas variables al sistema seguro del banco cambiando de url, cuando el banco me devuelve las variables y retorna a mi url se pierden la sesión y las variables. En IE no ocurre, y realiza el pedido con los datos asignados correctamente.
Quizás esto no va aquí... mejor en php, perdón... Por:Sisco
mejor usas extract($_POST); o extract($_GET); y no haces nada de codigo....... Por:JAZS_blog
Sisco :
Sisco :
Gracias!
Alguien ha tenido problemas de sesiones con firefox?
En una tienda (oscommerce) me ocurre que paso unas variables al sistema seguro del banco cambiando de url, cuando el banco me devuelve las variables y retorna a mi url se pierden la sesión y las variables. En IE no ocurre, y realiza el pedido con los datos asignados correctamente.
Quizás esto no va aquí... mejor en php, perdón...
Ciero, mejor si uno de los moderadores lo mueve (al menos desde este offtopic).
Pues mira, núnca he usado oscommerce, pero en los sitios que he hecho con pagos en línea, hago que todos los enlaces enviados y devueltos sean seguros, así me evito problemas. El asunto, es que -como todo enlatado- oscommerce tiene sus reglas para la devolución o redirección de ejecución de archivos externos. Por:Pedro
Este script podria ser util pero no es seguro de trabajar...hay que tener en cuenta que no esta validando datos de ninguna manera asi que si le pasan un valor X por post y este valor no era el que la variable esperaba recibir...uuupppss!
tomen en cuenta que esta "tomando" literalmente hablando TODOS los valores que le pasen por get y post...pequeña atrocidad!! Por:alguien_blog
PHP con mysql Tengo problemas al enviar una varible POST me dice este mensaje:Notice: Undefined index: txt_name in C:\www\prueba.php on line 6.....todo lo demás funciona pero estoy enviando a grabare en la base datos mysql y sale este error. Por favor si alguien me puede ayudar Por:Iván_blog
¿Cual es la bulnerabilidad de enviar todas las variables por POST/GET si al final recogemos solo las que queremos y aun cuando no son globales?
O ¿hay forma de enviar solo, ciertas variables por POST/GET? Por:*Rogelio_blog
Thanx Por:None_blog
tengo estas 2 dudas:
1.- si deshabilito register_globals en el servidor y luego uso la funcion import_request_variables en la web estoy en las mismas o es más seguro así?
2.- Que es mejor usar?:
Código :
if (!ini_get('register_globals')) { $numero = count($_REQUEST); $tags = array_keys($_REQUEST);// obtiene los nombres de las varibles $valores = array_values($_REQUEST);// obtiene los valores de las varibles
// crea las variables y les asigna el valor for($i=0;$i<$numero;$i++){ $$tags[$i]=$valores[$i]; } }
o:
Código :
if (!ini_get('register_globals')) { @import_request_variables("GPC", ""); }
Por:Dani_235
hola como hago para que me funcione que el resultado de la consulta los muestre en los text sin que tengan que estar dentro del if esto es lo que tengo:
include("conecta.php"); ?> <form action="procedimiento.php" method="post" name="frmproce"> <center><h2><font face="arial">Procedimientos de Estado</font></h2></center><br> <center><table cellpadding="5"> <tr> <td><font face="arial">Código:</font> </td><? if (isset($_POST["BUSCAR"])) { $_POST["recopro"] = "SELECT * FROM procedimiento WHERE cod_procedimiento =". $_POST["ncopro"]; $_POST["recopros"] = mysql_query($_POST["recopro"],$_POST["enlace"]); if ($_POST["ncopros"] = mysql_fetch_array($_POST["recopros"])){ echo $_POST["ncopros"]["cod_procedimiento"]; echo $_POST["ncopros"]["nom_procedimiento"];
hola claro que necesito es no colocar register_global=On, si me funciona si echo esta dentro del if pero si los coloco en los values de los text me sale error como pudo hacer:S Agradezco todo la ayuda posible. Por:llyha_blog
el problema que tengo consiste en que envio unas get asi: <<a href='cambiarpractica.php?idd=".$result['id_practica']."'><input type='button' value='MODIFICAR' /></a> y funciona muy bien en firefox pero en explorer no "ALGUIEN PUEDE AYUDARME" Por:cristian andres (colombia
Nada de nada Por:Luis_blog
chorriada
yo no lo mate
torito!!!!!!!!!!!!!! Por:pepe el toro_blog
yo no jui Por:elias_blog
El script posteado inicialmente, para no tener que cambiar el nombre de la variable a recibir, solo hay q colocarlo al inicio de cada archivo .php que recibira los datos? Por:Rodolfo_blog
A pesar de ser un poco viejo este tip, sigue siendo útil. Buen aporte gracias. Por:Miguel_blog