Pregunta

Me tiene un poco de un misterio que no estoy bastante comprensión de la causa raíz del. Recibo un 'dependencia inseguros en unlink mientras se ejecuta con el parámetro -T' al intentar invocar de desvinculación de un guión. Ese no es el misterio, cuando me doy cuenta de que esto significa Perl está diciendo que estoy tratando de utilizar los datos corrompidos. El misterio es que estos datos fue previamente no contaminado en otro script que guarda en el disco sin ningún problema.

Así es como se va ... El primer script crea un nombre de archivo binario utilizando la siguiente

# For the binary file upload
my $extensioncheck = '';

my $safe_filename_characters = "a-zA-Z0-9_.";
  if ( $item_photo )  
  { 
    # Allowable File Type Check
    my ( $name, $path, $extension ) = fileparse ( $item_photo, '\..*' );
    $extensioncheck = lc($extension);
    if (( $extensioncheck ne ".jpg" ) && ( $extensioncheck ne ".jpeg" ) &&
        ( $extensioncheck ne ".png" ) && ( $extensioncheck ne ".gif" ))
    {
      die "Your photo file is in a prohibited file format.";  
    }

    # Rename file to Ad ID for adphoto directory use and untaint
    $item_photo = join "", $adID, $extensioncheck;
    $item_photo =~ tr/ /_/;  
    $item_photo =~ s/[^$safe_filename_characters]//g;  
    if ( $item_photo =~ /^([$safe_filename_characters]+)$/ ) { $item_photo = $1; }
    else {  die "Filename contains invalid characters"; }  
    }

$ identificador del anuncio es generada por el propio script usando una función de hora local (tiempo), así que no debe ser contaminada. $ Item_photo se reasigna utilizando el identificador del anuncio $ y $ extensioncheck antes de la verificación mancha, por lo que la nueva $ item_photo ahora no contaminado. Lo sé porque $ item_photo en sí no tiene problema de desenlace en sí este último en el guión. $ Item_photo sólo se utiliza el tiempo suficiente para crear otros tres archivos de imagen utilizando ImageMagick antes de que se lanzó utilizando la función de desvinculación. Los tres nombres de los archivos creados a partir del procesamiento de ImageMagick $ item_photo se crean simplemente como tal.

$largepicfilename  = $adID . "_large.jpg";
$adpagepicfilename = $adID . "_adpage.jpg";
$thumbnailfilename = $adID . "_thumbnail.jpg";

Los caminos están precedidas de los nuevos nombres de archivo para crear las direcciones URL, y se definen en la parte superior de la escritura, para que no puedan ser contaminados también. Las direcciones URL de estos archivos se generan como tal.

my $adpageURL = join "", $adpages_dir_URL, $adID, '.html';
my $largepicURL  = join "", $adphotos_dir_URL, $largepicfilename;
my $adpagepicURL = join "", $adphotos_dir_URL, $adpagepicfilename;
my $thumbnailURL = join "", $adphotos_dir_URL, $thumbnailfilename;

A continuación, las escribo al registro, sabiendo que todo está contaminado.

Ahora viene la parte chiflado. En un segundo guión que leí en estos archivos que desea borrar mediante la función de desvinculación, y aquí es donde me estoy haciendo mi bandera 'dependencia Insecue'.

# Read in the current Ad Records Database
open (ADRECORDS, $adrecords_db) || die("Unable to Read Ad Records Database");
flock(ADRECORDS, LOCK_SH);
seek (ADRECORDS, 0, SEEK_SET);
my @adrecords_data = <ADRECORDS>;
close(ADRECORDS);

# Find the Ad in the Ad Records Database
ADRECORD1:foreach $AdRecord(@adrecords_data)
{
  chomp($AdRecord);
  my($adID_In, $adpageURL_In, $largepicURL_In, $adpagepicURL_In, $thumbnailURL_In)=split(/\|/,$AdRecord);

  if ($flagadAdID ne $adID_In) { $AdRecordArrayNum++; next ADRECORD1 }
  else
  {
    #Delete the Ad Page and Ad Page Images
    unlink ("$adpageURL_In");
    unlink ("$largepicURL_In");
    unlink ("$adpagepicURL_In");
    unlink ("$thumbnailURL_In");
    last ADRECORD1;
  }
}

Sé que puedo simplemente untaint de nuevo, o incluso sólo lo soplan a través de saber que los datos es segura, pero eso no es el punto. Lo que quiero es entender por qué ocurre esto, en primer lugar, ya que no soy la comprensión de cómo está siendo visto previamente estos datos no contaminado como contaminada. Cualquier ayuda a iluminar cuando me falta esta conexión podría ser realmente apreciada, porque realmente quiero entender esto en lugar de escribir el truco para solucionarlo.

¿Fue útil?

Solución

Guardar la información en un archivo no guarda cualquier bit "contaminado" con los datos. Es sólo datos, procedentes de una fuente externa, por lo que cuando se lee Perl que se contamina de forma automática. En su segundo guión, tendrá que explícitamente untaint los datos.

Después de todo, algún otro programa malicioso podría haber cambiado los datos en el archivo antes de que el segundo guión tiene la oportunidad de leerlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top