Как мои ранее неопределенные данные могут снова испорчены?

StackOverflow https://stackoverflow.com/questions/3589709

  •  01-10-2019
  •  | 
  •  

Вопрос

У меня есть немного тайны, что я не совсем понимаю основную причину. Я получаю «небезопасную зависимость в UnimeNe», работая с переключателем «при попытке призывающую безнку от скрипта. Это не загадка, так как я понимаю, что это означает, что Perl говорит, что я пытаюсь использовать испорченные данные. Тайна заключается в том, что эти данные ранее были незаменитыми в другой скрипт, который сохранил его на диск без каких-либо проблем.

Вот как это идет ... первый скрипт создает двоичное имя файла, используя следующие

# 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 генерируется самим сценарием с использованием локального (времени) функции, поэтому она не должна быть испорчена. $ item_photo переназначен с использованием $ adid и $ Extendercheck перед проверкой Taint, поэтому новый item_photo item_photo теперь не представлен. Я знаю это, потому что сам $ emate_photo не имеет проблем с самой неинбиторией последней в скрипте. $ emate_photo используется достаточно длинным, чтобы создать три других файла изображений, используя ImageMagick, прежде чем он бросил с помощью функции Unlink. Три имена файлов, созданных из обработки ImageMAGICK $ reat_photo, созданы просто так.

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

Пути предложены к новым именам файлов для создания URL-адресов и определены в верхней части сценария, поэтому они также не могут быть испорчены. URL-адреса для этих файлов генерируются так.

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;

Затем я пишу их к записи, зная, что все не открыто.

Теперь наступает правая часть. Во втором сценарии я прочитал эти файлы, чтобы быть удалены, используя функцию Unlink, и именно здесь я получаю свой флаг «Insecue Tency».

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

Я знаю, что могу просто не открыть их снова, или даже просто взорвать их, зная, что данные безопасны, но это не точка. Я хочу, чтобы понять, почему это происходит в первую очередь, так как я не понимаю, как это ранее неразложенные данные сейчас рассматриваются как испорченные. Любая помощь, чтобы просветить, где я скучаю по этой связи, будет по-настоящему оценено, потому что я действительно хочу понять это, а не просто писать халат, чтобы исправить это.

Это было полезно?

Решение

Сохранение данных в файл не сохраняет никаких «испорченных» бита с данными. Это просто данные, исходящие от внешнего источника, поэтому, когда Perl читает, он становится автоматически испорченным. Во втором сценарии вам придется явно не открыть данные.

В конце концов, какая-то другая вредоносная программа могла бы изменить данные в файл до того, как у второго скрипта есть шанс прочитать его.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top