Domanda

Ho un po 'un mistero qui che io non sono del tutto capire la causa principale di. Ricevo un 'dipendenza Insicuro in unlink durante l'esecuzione con interruttore -T' quando provo a invocare unlink da uno script. Questo non è il mistero, come mi rendo conto che questo mezzo Perl sta dicendo sto cercando di utilizzare i dati contaminati. Il mistero è che questi dati precedentemente incontaminata in un altro script che ha salvato su disco senza problemi.

Ecco come va ... Il primo script crea un nome di file binario utilizzando il seguente

# 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"; }  
    }

$ adID è generato dallo script stesso utilizzando una funzione localtime (tempo), quindi non dovrebbe essere contaminato. $ Item_photo viene riassegnato con $ adID e $ extensioncheck prima del controllo contaminazione, così il nuovo $ item_photo è ora incontaminata. Lo so perché $ item_photo sé non ha alcun problema con unlink stessa quest'ultimo nello script. $ Item_photo viene utilizzato solo il tempo necessario per creare altre tre file di immagine utilizzando ImageMagick prima di essere gettato utilizzando la funzione unlink. I tre nomi di file creati dalla lavorazione ImageMagick di $ item_photo sono creati semplicemente in questo modo.

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

I percorsi sono preceduti ai nuovi nomi di file per creare gli URL, e sono definite nella parte superiore dello script, in modo che non possano essere alterati pure. Gli URL dei file sono generati in questo modo.

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;

Poi io li scrivo al record, sapendo tutto è contaminato.

Ora viene la parte irregolare. In un secondo script che ho letto questi file in da eliminare utilizzando la funzione di scollegare, e questo è dove sto ottenendo la mia bandiera 'Insecue dipendenza'.

# 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;
  }
}

So di poter ancora una volta solo untaint loro, o anche semplicemente soffiare attraverso sapendo che i dati sono al sicuro, ma non è questo il punto. Quello che voglio è quello di capire perché questo sta accadendo, in primo luogo, come io non sto capendo come questi dati precedentemente non contaminato viene ora visto come corrotto. Qualsiasi aiuto per illuminare dove mi manca questa connessione potrebbe essere veramente apprezzato, perché voglio davvero capire questo e non solo scrivere l'hack per risolvere il problema.

È stato utile?

Soluzione

Salvataggio di dati in un file non salva alcuna bit "contaminato" con i dati. E 'solo i dati, provenienti da una fonte esterna, in modo che quando il Perl legge diventa contaminato automaticamente. Nel suo secondo script, si dovrà esplicitamente untaint i dati.

Dopo tutto, qualche altro programma dannoso potrebbe aver cambiato i dati nel file prima che il secondo script ha la possibilità di leggerlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top