Recorriendo el array $_POST y regresandolo a variables

Iniciado por Azielito, 8 Mayo 2007, 00:04 AM

0 Miembros y 1 Visitante están viendo este tema.

Azielito

Pues, tengo todo listo, casi listo :xD

Miren, lo que quiero es...

Tomar [sub[TODOS[/sub] los valores y variables que traigo en $_POST, una vez que los tengo entonces los limpio, o hago lo que sea (en el ejemplo los codifico en Base64 pero podria usar cualquier otra funcion [htmlspecialchars o similares] )

ok, deberia ser algo asi

$datos = $_POST;
recorre (todos-LosValores-de$datos){
         TomarNombreApuntador = base64Encode(TomarValorApuntador);
         incremento;
}

Asi le asigno a la variable con el mismo nombre ese valor pero ya codificado :D. Que fail es, cierto?

Ahora, un ejemplo real :D
<form action="" method="post">
Nombre<input type="text" name="nombre" value="<?= $_POST['nombre'];?>"/><br />
Apellido<input type="text" name="apellido" value="<?= $_POST['apellido'];?>"/><br />
email<input type="text" name="email" value="<?= $_POST['email'];?>"/>
<input type="hidden" name="id" value="<?= md5(time());?>" />
<input type="submit">
</form><hr size=1 color="#ff0000" width="30%" align="left">
<?php
function limpiarCosas(){
$datos $_POST;
$x=0;
$total count($datos)-1;
$grupos array_keys($datos);
while($x<=$total){
// echo "<b>";
// echo $grupos[$x]." vale: ".$datos[$grupos[$x]]."</b> | ";
$variables '$'.$grupos[$x].' = "'.base64_encode($datos[$grupos[$x]]).'";';
// echo $variables;
eval($variables);
// echo "<hr>";
$x++;
}
}
limpiarCosas();
echo 
$nombre// En mi maquina esto me imprime el valor en texto plano del campo "nombre"
echo "<br>".$x// No me imprime nada, no se como sacarlo de ese ciclo dentro de la funcion ¬¬
?>


Dejo comentadas las lineas que uso para "depuracion?"

y dejo comentarios al ultimo :D

En concreto lo que quiero es que despues de ejecutar esa funcion me regrese en variables los valores codificados de cada campo que envio del formulario :D




Encontre un codigo que le asigna nuevos valores a $_GET y $_POST y $_COOKIE

la funcion es asi
limiarPorqueria($valor){
//aca muchas cosas que limpian los valores de el array que le pasas
}


y, luego la ejecutan asi
$_GET =& limpiarPorquerias($_GET);
$_POST =& limpiarPorquerias($_POST);


Nunca habia visto usar ese "=&" para que es? :D

Azielito

Al parecer ese "=&" le re-Asigna valores a esa variable ¬¬'

esto me da muchas ideas, ahora lo pruebo :P

Azielito

Nel, no quedo x'DDD
o soy muy malo con esto :xD
puse esto
$variables = '$final = array(\''.$grupos[$x].'\' => "'.base64_encode($datos[$grupos[$x]]).'");';
y que me regresara el valor de $final
y, luego le dije que
$_POST =& limpiarCosas($_POST)

y aun no funciona :D

Azielito

Al final ya quedo con array_map()
x'DDDDDDDDDDDD
y yo compliecandome las cosas jehehehehe

el codigo final es este:
<form action="" method="post">
Nombre<input type="text" name="nombre" value="<?= $_POST['nombre'];?>"/><br />
Apellido<input type="text" name="apellido" value="<?= $_POST['apellido'];?>"/><br />
email<input type="text" name="email" value="<?= $_POST['email'];?>"/>
<input type="hidden" name="id" value="<?= md5(time());?>" />
<input type="submit">
</form><hr size=1 color="#ff0000" width="30%" align="left">
<?php
function limpia($t){
$t base64_encode($t);
return $t;
}
function 
LimpiarTodo($datos){
if(is_array($datos)){
$datos array_map('limpia',$datos);
}else{
die("<font color=#ff0000><b>Error:</b></font> La funcion <b>LimpiarTodo</b> debe contener un arreglo.");
}
return $datos;
}
$_POST =& LimpiarTodo($_POST);
$nombre $_POST['nombre'];
$apellido $_POST['apellido'];
$email $_POST['email'];
$id $_POST['id'];

echo 
"<b>Nombre:</b> $nombre <br>";
echo 
"<b>Apellido:</b> $apellido<br>";
echo 
"<b>email:</b> $email <br>";
echo 
"<b>id:</b> $id";
?>


Con ejemplo y todo xD

Azielito

mañana hago un solo post y con la funcion por separado y que, ademas limpie el codigo html y los codigos malos ;)

Azielito

Perdon, perdon!!!

Cita de: Rentero en  8 Mayo 2007, 01:28 AM
Como has cerrado el post ¬¬

<?php
  
foreach ($_POST as $key => $value) {
    $
$key limpia($value);
  }
?>


Asi tienes todas las variables limpias :P




Bien, asi limpio las variables, pero, se quedan acaso en el array $_POST ?
es que es lo que quiero hacer >.< tengo ya una aplicasion casi terminada pero se olvidaron de limpiar las variables >.< y tiene XSS hasta por los botontes de submit xDDDDDDD

Entonces quiero que yo al poner una funcion me limpie todo y ya no tenga necesidad de hacerlo a cada archivo :D

Gracias Rentero :D

Azielito

#6
Al final quedo asi mi funcion
<?php
function LimpiarTodo($datos){
if(is_array($datos)){
$datos array_map('limpia',$datos);
}else{
die("<font color=#ff0000><b>Error:</b></font> La funcion <b>LimpiarTodo</b> debe contener un arreglo.");
}
return $datos;
?>



Lo "intereante" es en la linea
$datos = array_map('limpia',$datos);
array_map() Dicho en palabras del manual de PHP en linea
Citararray_map --  Aplica la llamada de retorno especificada a los elementos de las matrices dadas

O sea, que en el primer parametro de esta funcion deberan poner el nombre de la funcion que desean ejecutar en los valores del array, y, como segundo parametro; el array :D

En mi caso puse una funcion que se llama "limpia"

Ahora, para usar esta funcion debemos hacerlo de esta forma
<?php
$arreglo 
= array("a","b","c");
$arreglo =& LimpiarTodo($arreglo);
?>

Y, entonces convierte todos esos valores y los regresa a ese mismo array de datos :D
en caso de $_POST despues de aplicar esta funcion te regresara los datos ya codificados (dependiendo de la funcion que apliquen)
entonces ya podemos usar "normalmente" y sin tener la duda existencial de: ¿"Vulnerable o no vulnerable?"

Espero sirva de algo :d

Rentero

Perdón, Perdón! xD

La verdad es que no leí mucho lo que querias hacer pero bueno :P
<?php
  
foreach ($_POST as $key => $value) {
    $
$key limpia($value);
  }
?>

No lo regresa a $_POST lo que hace es crear una variable con el mismo nombre que tiene en $_POST pero con el contenido ya filtrado.

Otra opción para lo que quieres hacer podría ser:
<?php
  
foreach ($_POST as $key => $value) {
    
$_POST[$key] = limpia($value);
  }
?>


Saludos ;)
Firmado.