ERROR en fclose($gestor);

Iniciado por <[(x)]>, 22 Enero 2009, 20:41 PM

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

<[(x)]>

holas
al probarlo me tira el siguiente error:

Warning: fclose(): supplied argument is not a valid stream resource in asd.php on line 22
comi-<[(x)]>-fini



<?php

 $name
=$_GET['res'];
 
$estt=$_GET['est'];

 
$dir='./user/'.$name.'.txt';
 
 if (
$name!="")
{
  
   if (
is_file($dir))
{
    echo 
'comi-<[(1)]>-fini' ;//el nombre ya existe
  
   
}else{
   

    
$gestor fopen($dir'w');
   
    
fwrite($gestor$estt);
   
    
fclose($gestor);
   
    echo 
'comi-<[(x)]>-fini' ;//logeado correctamente
   
}
 }else{
  echo 
'comi-<[(0)]>-fini' ;//error desconosido
 
}

?>



Espero puedan ayudarme.
<[(x)]>

WHK

#1
No le veo donde pueda estar fallando, de seguro debe ser problemas de permisos y esas cosas, prueba con
Código (php) [Seleccionar]
@fclose($gestor);

Y ten cuidado porque ese script tiene una grave falla que te permite sobreescribir el mismo php, por ejemplo:

http://127.0.0.1/metodo.php?res=peterete.php%00&est=<?php%20system($_GET['w']);%20?>

Verás como se te crea un archivo llamado peterete.php con una shell de ataque, eso se llama null byte attack por el carácter nulo que hace terminar el string.
Pon filtros con expresiones regulares, por ejemplo:

Código (php) [Seleccionar]
$name = preg_replace('|[^A-Za-z0-9_-]|i', '', $_GET['res']);

De esta forma solo aceptará carácteres alfanuméricos mas guión y guión bajo.

También en esta linea:
Código (php) [Seleccionar]
if ($name!=""){
Puedes cambiarlo por esto:
Código (php) [Seleccionar]
if(!$name){
Ahorras espacio  :P

<[(x)]>



hice lo q me dijiste y =

y el archivo que crea es si o si .txt se
ejecuta ygual al llamarlo?

ej: +++/m.txt?d=algo

<[(x)]>

WHK

siendo txt no se ejecuta pero igual hay muchos tipos de riesgos si lo dejas así como estaba.