Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
افتراضيًا، يمكن لـ Aspose.Words for .NET تحميل الموارد البعيدة مثل الصور أو أنماط CSS أو مستندات HTML الخارجية عند استيراد المستندات أو إدراج الصور باستخدام DocumentBuilder. يسمح لك هذا السلوك بمعالجة مستنداتك بالتفاصيل الكاملة ولكن يمكن أن يكون سببًا لبعض المخاطر الأمنية إذا كانت المكتبة جزءًا من تطبيق ويب.
في هذه المقالة، نلقي نظرة على مشكلات الأمان الشائعة التي يمكن أن تنشأ عند تحميل الموارد الخارجية ونقدم توصيات حول كيفية تجنب مثل هذه المشكلات.
هناك عدد من المشكلات الأمنية النموذجية عند تحميل الموارد الخارجية.
على الأجهزة المضيفة المستندة إلى Windows، ستتم معالجة المستندات التي تحتوي على مراجع إلى الموارد التي تستخدم مسارات UNC مثل '\example.com\a\b' بشكل افتراضي. في بيئة المجال، سيؤدي ذلك إلى قيام المضيف بإرسال بيانات اعتماد المجال الخاصة به بتنسيق مجزأ إلى الخادم المحدد.
إذا كان المهاجم قادرًا على إقناع مستخدم أو خادم بمعالجة مستند باستخدام رابط المورد هذا الذي يشير إلى مضيف يتحكم فيه، فسيتلقى المهاجم بيانات اعتماد حساب المستخدم أو الخدمة بتنسيق تجزئة NTLM. يمكن بعد ذلك إعادة استخدام هذه البيانات في هجوم تمرير التجزئة الكلاسيكي، مما يسمح للمهاجم بالوصول إلى أي مورد كمستخدم الضحية أو حساب الخدمة.
إذا كان الحساب المعني يستخدم كلمة مرور ضعيفة أو يمكن تخمينها، فيمكن للمهاجم أيضًا تنفيذ هجوم لكسر كلمة المرور لاستعادة كلمة مرور الحساب لمزيد من الاستخدام الضار.
كما هو الحال في الحالة السابقة، ستؤدي معالجة مستند بمرجع إلى ملف صورة محلي إلى تضمين هذا الملف في المستند النهائي. وهذا يمكن أن يؤدي إلى الكشف عن معلومات حساسة.
يمكن للمهاجم تحميل مستند يشير أو يتضمن صورًا كبيرة جدًا - ما يسمى “قنابل تخفيف الضغط”. عند معالجة هذه الصور، ستستهلك المكتبة كميات هائلة من الذاكرة ووقت وحدة المعالجة المركزية.
يمكن للمهاجم إنشاء سلسلة من المستندات التي تحتوي على روابط مضمنة لمجموعات مشتركة من عنوان IP الداخلي والمنفذ، ثم إرسالها إلى خدمة ويب باستخدام مكتبة Aspose.Words لمعالجة المستندات.
استنادًا إلى طول الوقت الذي تستخدمه الخدمة لمعالجة المستند، يمكن للمهاجم تحديد ما إذا كانت مجموعة IP/Port معينة تمت تصفيتها بواسطة جدار الحماية:
لحل المشكلات الموضحة أعلاه ولتحسين أمان تطبيقات الويب، يمكنك التحكم في تحميل الموارد الخارجية أو تعطيله باستخدام IResourceLoadingCallback.
يوضح مثال الكود التالي كيفية تعطيل تحميل الصور الخارجية:
.NET
public class DisableExternalImagesHandler : IResourceLoadingCallback
{
public ResourceLoadingAction ResourceLoading(ResourceLoadingArgs args)
{
// Skip external images loading.
return (args.ResourceType == ResourceType.Image)
? ResourceLoadingAction.Skip
: ResourceLoadingAction.Default;
}
}
...
const string documentFilename = "input.docx";
var disableExternalImagesOptions = new LoadOptions
{
ResourceLoadingCallback = new DisableExternalImagesHandler()
};
var doc = new Document(documentFilename, disableExternalImagesOptions);
يوضح مثال التعليمات البرمجية التالي كيفية تعطيل الموارد البعيدة:
.NET
private class DisableRemoteResourcesHandler : IResourceLoadingCallback
{
public ResourceLoadingAction ResourceLoading(ResourceLoadingArgs args)
{
return IsLocalResource(args.OriginalUri)
? ResourceLoadingAction.Default
: ResourceLoadingAction.Skip;
}
private static bool IsLocalResource(string fileName)
{
DirectoryInfo dirInfo;
try
{
var dirName = Path.GetDirectoryName(fileName);
if (string.IsNullOrEmpty(dirName))
return false;
dirInfo = new DirectoryInfo(dirName);
}
catch
{
return false;
}
foreach (DriveInfo d in DriveInfo.GetDrives())
{
if (string.Compare(dirInfo.Root.FullName, d.Name, StringComparison.OrdinalIgnoreCase) == 0)
return d.DriveType != DriveType.Network;
}
return false;
}
}
...
var disableRemoteResourcesOptions = new LoadOptions
{
ResourceLoadingCallback = new DisableRemoteResourcesHandler()
};
var doc = new Document(documentFilename, disableRemoteResourcesOptions);
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.