PHP - Problema con listado de archivos

 
Vista:

Problema con listado de archivos

Publicado por gran (2 intervenciones) el 26/06/2019 03:35:40
Hola gente, les comento, necesito listar y previsualizar desde un archivo php otros archivos txt.

Estuve editando un script que encontre y logre hacerlo funcionar.

El problema que tengo ahora es que la idea es que solo se puedan "ver" archivos de cierta extension o al menos evitar que se puedan leer archivos PHP
Otro problema que tengo es que sufro de transversal directory por lo cual cualquiera puede buscar archivos hacia atras haciendo ../../
La idea es que el script solo pueda leer el contenido de la carpeta en la que el se encuentra, sin mostrar los archivos "php" y sin permitirle la lectura de otros phps o del mismo
Sinceramente se practicamente nada de php pero me las ingenio.
si me pueden dar una mano se los agradeceria (llevo casi una semana con esto)

la idea es leer asi https://whocallsme.club/test.php?id=database&lista=archivo.txt

este es el script que estuy utilizando

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<?php
 
@set_time_limit(0);
 
$dir = ".";
 
function listar_archivos($dir)
	{
	 if ($dh=@dir($dir))
		{
			while (
			$file = $dh->read())
				{
				 if (($file=='.') or ($file=='..'))
					{
					 $links_ls[]=$file;
					}
				 elseif (is_dir($dir.'/'.$file))
					{
					 $dirs_ls[]=$file;
					}
				 else
					{
					 $archivos_ls[]=$file;
					}
				}
 
			if(@asort($archivos_ls))
			{
			 foreach ($archivos_ls as $archivo)
			 		{
					 echo '<tr valign="top">
				
					 <td><a href="?id=database&lista='.$archivo.'">'.$archivo.'</a></td>
					 
					 </tr>';
					 flush();
					 ob_flush();
					}
			}
			echo '</table>';
		}
 
	}
 
 
 
	/* no quitar la funcion de abajo*/
 
	/* no quitar la funcion de arriba*/
 
if (($_GET['id'] == 'dir') or (!$_GET['id']))
	{
	 if (trim($dir)=='')
		{
		 $dir = getcwd();
		}
	 listar_archivos($dir);
	}
elseif (($_GET['id'] == 'database') &&(!trim($_GET['lista']) == ''))
	{
 
	if ($_POST['save_file'] == 'pwz')
	{
 
 
	}
 
	/*esta funcion carga el contenido*/
	/*e echo '<textarea name="c0d3" cols="80" rows="20">';*/
 
 
	 else
			{
			 echo htmlentities(@file_get_contents(@realpath($dir.'/'.$_GET['lista'])));
			}
	/*e echo '</textarea></form>';*/
	}
 
?>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema con listado de archivos

Publicado por joel (1269 intervenciones) el 26/06/2019 07:56:56
Hola Gran, puede ser que le falte código?? lo digo porque veo que cierras </table> pero no veo donde lo abras...

aparte de eso, a tu pregunta de no añadir los archivo con extension .php... podrías hacer algo así:
1
2
3
if (strtolower(pathinfo($file, PATHINFO_EXTENSION))!="php") {
    $archivos_ls[]=$file;
}


el otro tema que comentas del ../ no se muy bien como hacerlo... lo he probado poniéndolo en la url pero no me funciona... me puedes comentar con mas detalle?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Problema con listado de archivos

Publicado por gran (2 intervenciones) el 26/06/2019 08:18:09
antes que nada muchisimas gracias por tu respuesta @joel efectivamente el codigo como mencione antes fue modificado (en realidad quite muchisimas cosas de otro codigo) pero asi ahora esta funcional (seria el completo, luego reviso sobre lo que mencionas) sobre lo del transversal path ( ../ ) supongamos que tu en la raiz de tu sitio tienes "index.php" y una carpeta llamada "folder" en la cual esta este script, el problema estaria en esta representacion haciendo asi https://whocallsme.club/folder/test.php?id=database&lista=../index.php

en realidad en el sitio que puse recien no va a funcionar ese ejemplo debido a que no existe la carpeta folder, pero es a modo de ejemplo

Bien te comento edite la linea 24 la cual dice asi
1
$archivos_ls[]=$file;

del script que puse aqui mismo y lo cambie por lo que me mencionaste
1
2
if (strtolower(pathinfo($file, PATHINFO_EXTENSION))!="php") {
    $archivos_ls[]=$file;
efectivamente ya no me lista el archivo php, si embargo continuo teniendo el problema principal de que si pongo
1
php?id=database&lista=index.php
en la barra de direcciones se puede ver el contenido de los php, alguna idea para eso? (soy muy muy novato, perdon por preguntar tanto)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar