Foros del Web » Programando para Internet » PHP »

Evitar RFI

Estas en el tema de Evitar RFI en el foro de PHP en Foros del Web. Bueno pues espero me pueda ayudar diciendo como puedo evitar que modifiquen mi web en php con la funcion include() ya que en mi sitio ...
  #1 (permalink)  
Antiguo 20/07/2006, 16:47
Avatar de TheJez  
Fecha de Ingreso: agosto-2004
Ubicación: México - Distrito Federal
Mensajes: 176
Antigüedad: 13 años, 3 meses
Puntos: 0
Evitar RFI

Bueno pues espero me pueda ayudar diciendo como puedo evitar que modifiquen mi web en php con la funcion include() ya que en mi sitio web tenia un archivo con este codigo
Cita:
<?
foreach($_GET as $nombre_campo => $valor){
$asignacion = "\$" . $nombre_campo . "='" . $valor . "';";
eval($asignacion);
}
?>
<?
foreach($_POST as $nombre_campo => $valor){
$asignacion = "\$" . $nombre_campo . "='" . $valor . "';";
eval($asignacion);
}
?>
<?PHP
if ($id=="") {
echo ("error en la sección");
}
else {
@include($id.".php");
}
echo ('<hr width="50%"><center><font size="1">T h e J e z - W e b &reg;</font></center>');
?>
y me hicieron un ataque de remote file inclusion incluyendo un archivo con codigo maligno... es hosting de paga por lo cual no puedo modifica la configuracion del php
__________________
"Knowledge is power..."
"Conocimiento es poder"
TheJez^
  #2 (permalink)  
Antiguo 20/07/2006, 17:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En principio se trata de que no hagas un "include()" directo como lo haces .. Tu crees que "forzando" la extensión del archivo a incluir y dato que llega por el URL tipo index.php?id=nose te ivas a salvar.

Se trata de que en la medida de lo posible tengas una lista de tus scripts permitidos a incluir en un array por ejemplo. De esta forma puedes validar si el dato que te piden está en tu array y si no está .. rechazarlo. Es una manera bastante segura .. pues el n° de scripts a incluir son "finitos" .. en principio.

Puedes usar un array y funciones como in_array() para este tipo de validaciones:
www.php.net/array

Por lo demás, NO HAGAS:
Código PHP:
<?
foreach($_GET as $nombre_campo => $valor){ 
$asignacion "\$" $nombre_campo "='" $valor "';"
eval(
$asignacion); 

?>
Usa y accede directamente a $_GET o al array supeglobal que necesites .. NO los evalues!!. Eso sólo es una manera de hacerte más fácil la llamada a variables ..pero NO es seguro! .. Es decir, pierde un poco de tiempo en generar tu código para que este sea seguro por siempre.

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 18:22.