Foros del Web » Programando para Internet » PHP »

Importante Falla De Seguridad !!

Estas en el tema de Importante Falla De Seguridad !! en el foro de PHP en Foros del Web. Em mi pagina web he puesto este codigo para hacer "include" de mis archivos pero me he dado cuenta que este script es vulnerable ya ...
  #1 (permalink)  
Antiguo 25/05/2005, 17:58
 
Fecha de Ingreso: enero-2005
Mensajes: 33
Antigüedad: 12 años, 11 meses
Puntos: 0
Importante Falla De Seguridad !!

Em mi pagina web he puesto este codigo para hacer "include" de mis archivos pero me he dado cuenta que este script es vulnerable ya que se puede hacer include a archivos externos ala web como puedo hacer para que no se incluyan archivos externos ala web..
<?

if($pagina== "") { ////variable para incluir la pagina

include("home2.php"); ///pagina default

}
else {

if(file_exists("$pagina.php")) { ///si la pagina existe incluirla

include("$paginaphp");
}
else {

echo("<center>El enlace no existe</center><br><br>") ;///mensaje si no existe el archivo
}
}
?>

PERO COMO LE AGO PARA QUE NO EJECUTE SCRIPTS QUE NO SEAN DE MI WEB..
__________________
[email protected] :adios:

Última edición por hackeka; 25/05/2005 a las 18:04
  #2 (permalink)  
Antiguo 25/05/2005, 18:03
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
- Haz uso de switch() en vez de if->elseif->else... : www.php.net/switch
- Usa variables superglobales... no muestras cómo recojes la variable $pagina: http://www.forosdelweb.com/showthrea...989#post238989
- ... Web's modelares?? cheka el artículo al respecto de www.zonaphp.com

Suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 25/05/2005, 18:30
 
Fecha de Ingreso: enero-2005
Mensajes: 33
Antigüedad: 12 años, 11 meses
Puntos: 0
gracias jam1138

GRacias por tu aportacion pero esque antes ya avia utilizado esa funcion pero el problema esque como tengo muchos archivos.php tengo que escribirla cientos de veces y php no me leeia esa funcion despues de determinado numero de lineas con esa funcion y era un problema.
Y por eso opte por usar la otra funcion pero cuando me di cuenta del gran ollo de seguridad que deje me di unos golpes de cabeza ya que si ubieran detectado esta vulnerabilidad ya ubieran hackeado la web.

Por eso recurro a su ayuda como puedo complementar esta funcion para que no ejecute scripts ajenos a mi web..
__________________
[email protected] :adios:
  #4 (permalink)  
Antiguo 25/05/2005, 18:33
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
ejém.... ¿? ¿qué función?????...

Si algo vaz a implementarlo en varios scripts sacale probecho a la función (esa sí ) include().
www.php.net/include

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 25/05/2005, 18:42
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 12 años, 8 meses
Puntos: 2
Hola!

A modo de truco facil, tu sabes que para ser interno no debe tener nada como http://, entonces en tu cadena busca y limpia eso, algo como:

if($pagina== "") { ////variable para incluir la pagina

include("home2.php"); ///pagina default

}
else
{

//asegurarte que no es un URL hacia otra pagina
$pagina = str_replace("http", "", $strPagina);

if(file_exists("$pagina.php")) { ///si la pagina existe incluirla

include("$paginaphp");
}
else {

echo("<center>El enlace no existe</center><br><br>") ;///mensaje si no existe el archivo
}
}
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #6 (permalink)  
Antiguo 25/05/2005, 18:44
 
Fecha de Ingreso: enero-2005
Mensajes: 33
Antigüedad: 12 años, 11 meses
Puntos: 0
las funciones

Me refiero ala funcion switch()
__________________
[email protected] :adios:
  #7 (permalink)  
Antiguo 25/05/2005, 18:45
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 12 años, 8 meses
Puntos: 2
Tambien...

Si estas pasando URL con todo y tu dominio, entonces puedes asegurarte que la liga tiene tu dominio, algo como:

Ejemplo, tu dominio es: www.tudominio.com

$Pos = strpos($pagina, "www.tudominio.com");

if ($Pos === false)
{

sabes que no encontraste tu dominio en la liga, entonces esta mal y te estan tratando de incluir externos.

}

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #8 (permalink)  
Antiguo 25/05/2005, 18:50
 
Fecha de Ingreso: enero-2005
Mensajes: 33
Antigüedad: 12 años, 11 meses
Puntos: 0
Gracias neuron 376

Gracias amigo eso es lo que buscaba

Tambien gracias jam1138 tal ves no me explique bien pero gracias por tu atencion.
__________________
[email protected] :adios:
  #9 (permalink)  
Antiguo 26/05/2005, 08:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ten cuidado también con la inclusión de archivos de tu própio sitio que no desees que se incluyan .. por ejemplo un "configuracion.inc" .. o similar podría desvelar datos (como de conexión a tu BD contraseñas y demás) que baja ningún concepto te interesaría que se viesen.

Lo ideal es tener al menos una lista de los nombres de tus scripts que seran restringidos .. eso lo puedes hacer con un array() y ver si está el nombre del archivo que se está pidiendo en dicho array (con in_array()) antes de hacer tu include() "a ciegas".

Por lo demás .. no sé que tipo de contenido gestionas .. pero si tienes tantos "cientos" de escripts/páginas .. ya sería hora tal vez de replantear el sistema (tu sitio) y ver como organizar esa información por ejemplo gestionandola desde Base de datos y sus consultas SQL .. esto plantea a su vez otros beneficios (como implementación de buscadores .. etc).

Un saludo,
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 09:12.