• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

RicardoR

Todos os ficheiro .qualquercoisa

24 mensagens neste tópico

Boas

Estou com um problema relativo à abertura de todos os ficheiros de um formato, neste caso .txt de uma determinada directoria.

A minha ideia era apos ter esses ficheiros numa variavel mostra-los o que depois me parece ser mais fácil.

Alguém me dá uma maozinha xD?

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpem de não ter posto o código  :-[

<?php 

$dir = "/home/a6483987/public_html/nc";

$sub = ($_GET['dir']);
$path = '/home/a6483987/public_html/nc';
$path = $path . "$sub";
$dh = opendir($path);
while (($file = readdir($dh)) !== false) {
    if($file != "." && $file != "..") {
            if (substr($file, -4, -3) =="."){
           $ler_texto=fopen($file,"r");
	   while(($a=fgets($ler_texto,1000)) !=false){
	   echo $a ;
	   }
	   fclose($ler_texto);
            }else{            
        echo " <a href='?dir=$sub/$file'><font face=candara color=#CCCCCC>$file</font></a><br />";
          }
    }
}
closedir($dh);
?>

Não está a dar com os seguintes erros :

Warning: fopen(ola.txt) [function.fopen]: failed to open stream: No such file or directory in /home/a6483987/public_html/nc.php on line 20

Warning: fgets(): supplied argument is not a valid stream resource in /home/a6483987/public_html/nc.php on line 21

Warning: fclose(): supplied argument is not a valid stream resource in /home/a6483987/public_html/nc.php on line 24

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece-me bastante óbvio o erro: o ficheiro não existe.

E esse script não é seguro, dava para explorar a máquina onde tens isso a correr.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece-me bastante óbvio o erro: o ficheiro não existe.

E esse script não é seguro, dava para explorar a máquina onde tens isso a correr.

Como?  :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como?  :hmm:

Como o quê? Explorar? Dá uma olhada ao percuso do valor do $_GET['dir'], basta usar paths relativos que vou onde quiser.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como o quê? Explorar? Dá uma olhada ao percuso do valor do $_GET['dir'], basta usar paths relativos que vou onde quiser.

Mas ele está a fazer isto: $path = $path . "$sub"; E o $path já tem valor: $path = '/home/a6483987/public_html/nc'; Assim só podes andar para a frente e não para trás, e ao andar para frente se calhar é o que ele quer e não tem la nada que tu não possas ver... Ou então não estou a perceber.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Parece-me bastante óbvio o erro: o ficheiro não existe.

E esse script não é seguro, dava para explorar a máquina onde tens isso a correr.

O ficheiro está lá ola.txt...O erro não sei porque é que está a dar ...

A variável abrange todos os ficheiros lá so tenho  ola.txt

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas ele está a fazer isto: $path = $path . "$sub"; E o $path já tem valor: $path = '/home/a6483987/public_html/nc'; Assim só podes andar para a frente e não para trás, e ao andar para frente se calhar é o que ele quer e não tem la nada que tu não possas ver... Ou então não estou a perceber.

Teres /home/lulz/ ou /home/lulz/oi/../../ é a mesma coisa.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

$root=dirname(__file__);
$file=$root.$_get['dir'];

atenção o script não está seguro......

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas alguém sabe resolver do erro?

Sobre a segurança como por seguro e como se entrava na máquina?

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a melhor maneira para pores seguro, é fazeres uma listagem dos ficheiros que desejas abrir, ex:

$root=dirname(__file__).'/';

$ficheiros_autorizados=array('batatas.txt', 'couves.txt', 'RicardoR.coco');
if(in_array($_GET['file'],$ficheiros_autorizados)){

/*o código que queres ex:*/

include($file=$root.$_get['file'];

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

parece-me bastante obvio

onde tens

$path = $path."$sub"

deveria estar

//aqui insere código que verifique se a string que vem  GET é segura
$path = $path.$sub

sobre segurança bastava por no link da pagina algo como "index.php?dir=../../.." e andava logo 3 pastas para traz (confirmas djthyrax?)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O facto de ele ter "$sub" não muda nada, não há aí erro algum.

sobre segurança bastava por no link da pagina algo como "index.php?dir=../../.." e andava logo 3 pastas para traz (confirmas djthyrax?)

Sim.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu só não sabia era que fazer "/home/lulz/oi/../../abc/php/" era relamente fazer "/home/abc/php/" o que me parece mais lógico, mas segundo o exemplo que deste lá em cima djthyrax, ficaria mais "/home/lulz/abc/php/". Eu só não sabia que isto era possível. Acho que tudo o que programei até hoje tem falhas de segurança atão :X

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Todos os endereços para ficheiros devem ter:

$path = str_replace(array('/', '\'), '', $path);

Desta forma eliminas todas as possibilidades de navegação :thumbsup:

«

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Todos os endereços para ficheiros devem ter:

$path = str_replace(array('/', '\'), '', $path);

Desta forma eliminas todas as possibilidades de navegação :)

«

Esqueceste-te de escapar a \ :thumbsup: Mas sim, é isso. :D
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esqueceste-te de escapar a \ :D Mas sim, é isso. :D

Já não é a primeira vez LOL Mas passa despercebido xD

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Todos os endereços para ficheiros devem ter:

$path = str_replace(array('/', '\'), '', $path);

Desta forma eliminas todas as possibilidades de navegação :D

«

E se a ideia for navegar mesmo? Não faz muito sentido...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nao sei se o problema já foi resolvido ou não mas.. eu diria que esse erro aparece porque enganaste-te ao atribuires o directorio...

Substitui:

$dir = "/home/a6483987/public_html/nc";

Por:

$dir = "/home/a6483987/public_html/nc/";

Nem me dei ao trabalho de ler o código... apenas julguei pelo erro... Para leres os ficheiros de um certo directorio todos dada uma certa extensao.. deixo-te o seguinte script que podes aplicar (não foi testado.. pois não tenho paciência, mas julgo que trabalhe).


<?php

if ($handle = opendir('directorio aqui/')) {

    while (false !== ($file = readdir($handle))) {
                
                $filel=strlen($file);
             	$ext=$filel-4;
	$fileav=$file[$ext+1].$file[$ext+2].$file[$ext+3];
	if($fileav=="extensao pretendida"){

                     Codigo pretendido.

	}
	    }
}
?>

Nota que em: $ext=$filel-4; 4 sera n + 1, sendo n o numero de letras contidas na extensao.

Have fun :D (e sorry se não trabalhar bem ^^")

EDIT: Nota tambem que a variavel que contem a extensao sera "$fileav", logo a variável que conterá o nome de ficheiro é "$file". E é a que deverás usar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E se a ideia for navegar mesmo? Não faz muito sentido...

Se a ideia for navegar não se aplica o filtro. Mas aí já se tem de criar outra solução para garantir a segurança.

Neste caso é só mesmo preciso garantir que apenas se acede a ficheiros da pasta X.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora