سؤال

أقوم بتحليل الكود الخاص بي (C#، تطبيق سطح المكتب) مع تحليل رمز CAT.NET والحصول على "تطهير مسار الملف قبل تمريره إلى روتينات النظام" عند التعامل مع أسماء الملفات. ما لا أفهمه هو التأكد من أن اسم الملف صالح ، أستخدمه:

void SomeMethod(String filename)
{
    filename = System.IO.Path.GetFullPath(filename);
    // ... Do stuff
}

أليس "حل سحري" لحل المشكلات بأسماء الملفات غير الصالحة؟ لقد قرأت شيئًا مشابهًا هنا (إجابة أولى) ، لكن في حالتي ، أتعامل فقط مع الملفات المحلية ، حسنًا ، شيء أساسي للغاية ، لذلك ...

فلماذا أتلقى هذه الرسالة وكيف أفعل لتجنب الحصول عليها؟

هل كانت مفيدة؟

المحلول

أعلم أن هذا سؤال قديم ، لكنني صادفت للتو شيئًا قد يكون مفيدًا على وجه التحديد برسالة خطأ CAT.NET.

في مشاركة مدونة حول قواعد تدفق بيانات CAT.NET ، لديهم هذا لتقوله عن FileCanonicalizationRule:

وصف

يمكن أن تؤدي إدخال المستخدم المستخدمة في إجراءات معالجة الملفات إلى تعرضية تقديرية الملف. يعتبر الكود عرضة بشكل خاص لمشكلات الكنز إذا اتخذ أي قرارات بناءً على اسم مورد يتم تمريره إلى البرنامج كمدخلات. الملفات والمسارات وعنوان URL هي أنواع موارد عرضة للتصاريح لأنه في كل حالة ، هناك العديد من الطرق المختلفة لتمثيل نفس الاسم.

دقة

تطهير مسار الملف قبل تمريره إلى ملفات معالجة الملفات. استخدم path.getinvalidfilenamechars أو path.getInvalIdPathchars للحصول على الأحرف غير الصالحة وإزالتها من الإدخال. يمكن العثور على مزيد من المعلومات في http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidfilenamechars.aspx.

لذلك ، يقترحون أن تستخدم Path.GetInvalidFileNameChars و Path.GetInvalidPathChars للتحقق من صحة مساراتك.

لاحظ أن اقتراحهم هو إزالة الأحرف غير صالحة. على الرغم من أن هذا سيجعل المسار صالحًا بالفعل ، إلا أنه قد يتسبب في سلوك غير متوقع للمستخدم. كتعليقات على هذه يشير السؤال/الإجابة إلى أنه من الأفضل الإقلاع في وقت مبكر وإخبار المستخدم بأن مساره غير صالح ، بدلاً من القيام بشيء غير متوقع مع مدخلاتهم (مثل إزالة الأحرف السيئة واستخدام الإصدار المعدل).

نصائح أخرى

إذا كان اسم الملف من مستخدم ، فقد يكون شيئًا مثل "../../../../ etc/passwd" - رسالة الخطأ تخبرك أنك بحاجة إلى تعقيمها حتى لا تتمكن من الحصول عليها إلى الدلائل ، ليس من المفترض أن.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top