Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Azielito en 8 Mayo 2007, 00:04 am



Título: Recorriendo el array $_POST y regresandolo a variables
Publicado por: Azielito en 8 Mayo 2007, 00:04 am
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
Código:
$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
Código:
<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
Código:
limiarPorqueria($valor){
//aca muchas cosas que limpian los valores de el array que le pasas
}

y, luego la ejecutan asi
Código:
$_GET =& limpiarPorquerias($_GET);
$_POST =& limpiarPorquerias($_POST);

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


Título: Re: Recorriendo el array $_POST y regresandolo a variables
Publicado por: Azielito en 8 Mayo 2007, 00:24 am
Al parecer ese "=&" le re-Asigna valores a esa variable ¬¬'

esto me da muchas ideas, ahora lo pruebo :P


Título: Re: Recorriendo el array $_POST y regresandolo a variables
Publicado por: Azielito en 8 Mayo 2007, 00:38 am
Nel, no quedo x'DDD
o soy muy malo con esto :xD
puse esto
Código:
$variables = '$final = array(\''.$grupos[$x].'\' => "'.base64_encode($datos[$grupos[$x]]).'");';
y que me regresara el valor de $final
y, luego le dije que
Código:
$_POST =& limpiarCosas($_POST)

y aun no funciona :D


Título: Re: Recorriendo el array $_POST y regresandolo a variables
Publicado por: Azielito en 8 Mayo 2007, 01:16 am
Al final ya quedo con array_map()
x'DDDDDDDDDDDD
y yo compliecandome las cosas jehehehehe

el codigo final es este:
Código:
<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


Título: Re: Recorriendo el array $_POST y regresandolo a variables
Publicado por: Azielito en 8 Mayo 2007, 01:17 am
mañana hago un solo post y con la funcion por separado y que, ademas limpie el codigo html y los codigos malos ;)


Título: Re: Recorriendo el array $_POST y regresandolo a variables
Publicado por: Azielito en 8 Mayo 2007, 16:07 pm
Perdon, perdon!!!

Como has cerrado el post ¬¬

Código:
<?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


Título: Re: Recorriendo el array $_POST y regresandolo a variables
Publicado por: Azielito en 8 Mayo 2007, 16:15 pm
Al final quedo asi mi funcion
Código:
<?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
Citar
array_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
Código:
<?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


Título: Re: Recorriendo el array $_POST y regresandolo a variables
Publicado por: Rentero en 8 Mayo 2007, 16:26 pm
Perdón, Perdón! xD

La verdad es que no leí mucho lo que querias hacer pero bueno :P
Código:
<?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:
Código:
<?php
  foreach ($_POST as $key => $value) {
    $_POST[$key] = limpia($value);
  }
?>

Saludos ;)