Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
به طور پیش فرض، Aspose.Words برای .NET می تواند منابع راه دور مانند تصاویر، سبک های CSS یا اسناد HTML خارجی را هنگام وارد کردن اسناد یا درج تصاویر با استفاده از DocumentBuilder بارگیری کند. این رفتار به شما امکان می دهد اسناد خود را با جزئیات کامل پردازش کنید، اما اگر کتابخانه بخشی از یک برنامه وب باشد، می تواند دلیلی بر برخی خطرات امنیتی باشد.
در این مقاله، نگاهی به مسائل امنیتی رایجی که میتواند هنگام بارگیری منابع خارجی ایجاد شود، میاندازیم و توصیههایی برای جلوگیری از چنین مشکلاتی ارائه میکنیم.
تعدادی از مشکلات امنیتی معمولی هنگام بارگیری منابع خارجی وجود دارد.
در میزبان های مبتنی بر Windows، اسناد حاوی ارجاع به منابعی که از مسیرهای UNC مانند '\example.com\a\b' استفاده می کنند به طور پیش فرض پردازش می شوند. در یک محیط دامنه، این باعث می شود که هاست اعتبار دامنه خود را با فرمت هش شده به سرور مشخص شده ارسال کند.
اگر مهاجم بتواند یک کاربر یا سرور را متقاعد کند که سندی را با چنین پیوند منبعی که به میزبانی که کنترل میکند را پردازش کند، مهاجم اعتبار کاربری یا حساب کاربری سرویس را در قالب هش NTLM دریافت میکند. سپس میتوان از چنین دادههایی در یک حمله کلاسیک پاس در هش استفاده کرد و به مهاجم اجازه میدهد به عنوان کاربر قربانی یا حساب سرویس به هر منبعی دسترسی پیدا کند.
اگر حساب مورد نظر از یک رمز عبور ضعیف یا قابل حدس زدن استفاده کند، مهاجم علاوه بر این میتواند یک حمله شکستن رمز عبور برای بازیابی رمز عبور حساب برای استفاده مخرب بیشتر انجام دهد.
مشابه مورد قبلی، پردازش یک سند با ارجاع به یک فایل تصویر محلی منجر به قرار گرفتن آن فایل در سند نهایی می شود. این می تواند منجر به افشای اطلاعات حساس شود.
مهاجم میتواند سندی را آپلود کند که یا به تصاویر بسیار بزرگ ارجاع میدهد یا حاوی تصاویر بسیار بزرگ است - به اصطلاح “بمبهای رفع فشار”. هنگام پردازش این تصاویر، کتابخانه مقدار زیادی از حافظه و زمان CPU را مصرف می کند.
مهاجم می تواند مجموعه ای از اسناد حاوی پیوندهای تعبیه شده به ترکیبات رایج آدرس 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.