Frage

habe ich ein bisschen ein Rätsel hier, dass ich nicht ganz verstehen, die Ursache. Ich erhalte eine ‚Unsichere Abhängigkeit in unlink während mit -T-Schalter aktiviert‘ bei dem Versuch, aus einem Skript aufrufen unlink. Das ist nicht das Geheimnis, wie ich merke, dass dies bedeutet, Perl sagt ich verdorbene Daten zu verwenden, versuchen. Das Geheimnis ist, dass diese Daten in einem anderen Skript zuvor unbefleckt waren, dass es auf der Festplatte ohne Probleme gespeichert.

Hier ist, wie es geht ... Das erste Skript erstellt ein binären Dateinamen die folgenden

mit
# 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 wird durch das Skript generiert sich ein Lokalzeit (Zeit) Funktion, so dass es nicht verdorben werden sollte. $ Item_photo wird neu zugewiesen mit $ adID und $ extensioncheck VOR dem Makel zu überprüfen, so dass die neue $ item_photo jetzt einwandfrei ist. Ich weiß das, weil $ item_photo selbst kein Problem mit unlink hat sich letztere im Drehbuch. $ Item_photo nur lange genug verwendet wird, drei andere Bilddateien mit ImageMagick zu erstellen, bevor es die unlink-Funktion geworfen hat verwenden. Die drei Dateinamen aus der ImageMagick Verarbeitung von $ erstellt item_photo einfach wie so erstellt.

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

Die Wege sind mit den neuen Dateinamen vorangestellt, die URLs zu erstellen, und am Anfang des Skripts definiert ist, so können sie nicht so gut verdorben werden. Die URLs für diese Dateien sind wie so erzeugt wird.

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;

Dann schreibe ich sie auf den Datensatz, zu wissen, alles einwandfrei ist.

Jetzt kommt der Teil screwy. In einem zweiten Skript las ich diese Dateien in mit der unlink-Funktion gelöscht werden, und das ist, wo ich meine ‚Insecue Abhängigkeit‘ Flag bin immer.

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

Ich weiß, dass ich nur untaint kann sie wieder, oder sogar nur blase durch zu wissen, dass die Daten sicher sind, aber das ist nicht der Punkt. Was ich will, ist zu verstehen, warum dies in erster Linie geschieht, da ich nicht verstehen, wie diese zuvor untainted Daten nun als verdorben angesehen wird. Jede Hilfe zu erleuchten, wo ich diese Verbindung fehle würde wirklich geschätzt werden, weil ich das wirklich lieber will verstehen, als nur den Hack schreiben, es zu beheben.

War es hilfreich?

Lösung

Speichern von Daten in einer Datei nicht speichern Sie alle „verdorben“ Bit mit den Daten. Es ist nur Daten von einer externen Quelle kommen, also wenn Perl liest es wird automatisch verdorben. In Ihrem zweiten Skript, werden Sie explizit untaint die Daten haben.

Immerhin einige andere bösartige Programm geändert, um die Daten in der Datei haben könnte, bevor das zweite Skript eine Chance hat, es zu lesen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top