كيف يمكن أن تصبح بياناتي غير الملوثة مسبقًا ملوثة مرة أخرى؟

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

  •  01-10-2019
  •  | 
  •  

سؤال

لدي القليل من الغموض هنا لا أفهم السبب الجذري. أحصل على "تبعية غير آمنة في غير آمن أثناء التشغيل باستخدام -T Switch" عند محاولة الاحتجاج غير المرتبط من البرنامج النصي. هذا ليس الغموض ، حيث أدرك أن هذا يعني أن بيرل يقول إنني أحاول استخدام البيانات الملوثة. الغموض هو أن هذه البيانات لم تكن ملوثة سابقًا في نص آخر أنقذها على القرص دون أي مشاكل.

إليك كيف تسير الأمور ... البرنامج النصي الأول ينشئ اسم ملف ثنائي باستخدام ما يلي

# 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 بواسطة البرنامج النصي نفسه باستخدام وظيفة Time (time) المحلية ، لذلك لا ينبغي ملوثها. $ item_photo تم إعادة تعيينه باستخدام $ adid و $ extensionCheck قبل الشيك taint ، وبالتالي فإن $ item_photo جديد غير ملوث. أعرف ذلك لأن $ item_photo نفسه ليس لديه مشكلة في إلغاء ربط نفسه الأخير في البرنامج النصي. يتم استخدام $ item_photo لفترة كافية فقط لإنشاء ثلاثة ملفات صور أخرى باستخدام ImageMagick قبل إلقاؤها باستخدام وظيفة غير مرغوب فيها. يتم إنشاء أسماء الملفات الثلاثة التي تم إنشاؤها من معالجة ImageMagick لـ $ item_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;

ثم أكتبها إلى السجل ، مع العلم أن كل شيء غير ملوث.

الآن يأتي الجزء الشهير. في برنامج نصي ثانٍ ، قرأت هذه الملفات في حذفها باستخدام وظيفة غير مرتكبة ، وهذا هو المكان الذي أحصل فيه على علامة "الاعتماد على الاعتماد".

# 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