Foros del Web » Programando para Internet » PHP »

Seguridad con include

Estas en el tema de Seguridad con include en el foro de PHP en Foros del Web. Ante todo hola a todos! :D Hoy programando una web me ha surgido una duda con respecto a la seguridad del sitio. He pensado en ...
  #1 (permalink)  
Antiguo 21/06/2006, 02:44
 
Fecha de Ingreso: diciembre-2005
Mensajes: 7
Antigüedad: 18 años, 11 meses
Puntos: 0
Mensaje Seguridad con include

Ante todo hola a todos! :D
Hoy programando una web me ha surgido una duda con respecto a la seguridad del sitio. He pensado en hacer un único archivo php al que se le pase por la url una página como variable y que la incluya, es decir, algo como lo siguiente:

Código:
<?php
		if ($HTTP_GET_VARS[inc] == '') {
			include ("main.php"); 
		} else {
			if (file_exists("$HTTP_GET_VARS[inc]")) {
				include ("$HTTP_GET_VARS[inc]");    
			} else {
				$atras = $_SERVER['HTTP_REFERER'];
	?>
			El archivo solicitado no existe. Volver <a href="<? echo $atras; ?>">atrás</a>
	<?php
			} 	
		}
?>
Mi duda tiene que ver con la posibilidad de pasarle como variable la dirección de un archivo externo que contenta código malicioso. He intentado pasarle como parámetro alguna dirección externa como google pero he comprobado que no la incluye.

¿Le veis algun problema a hacer esto?

Desde ya muchas gracias a todos y estaré encantado de recibir todos los comentarios que me hagais. Un Saludete!
  #2 (permalink)  
Antiguo 21/06/2006, 08:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
En principio .. una dirección externa la llamarías por http:// (por dicho "handler") ... lo que obtengas de ese tipo de llamada será el HTML generado .. en ningún caso un "código" PHP .. o de otro lenguaje que se ejecute en tus servidores. Eso en general, ya "salva" mucho (no de otro tipo de acciones maliciosas).

En tu caso .. validas si la página existe .. con file_exists() que sólo acepta rutas absolutas (de archivos que estén en tu servidor) .. Por eso actual tu código correctamente para ese caso concreto.

Lo que no deberías hacer directamente es meter tu variable que viene por el URL en una sentencia insert() sin ningún filtrado ni validación .. Por ejemplo, si haces un ../../ .. podrías ir "escalando" por tus rutas de directorios de tu própio servidor para llamar a otros archivos .. incluso fuera de tu sitio asignado (depende de la configuración de tu servidor al respecto: safe_mode .. o include_dir .. u open_base_dir entre otras directivas de php.ini que revisar ..)


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:46.