Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.
Varsayılan olarak, Aspose.Words için C++ belgeleri içe aktarırken veya DocumentBuilder kullanarak resim eklerken resimler, CSS stiller veya harici HTML belgeler gibi uzak kaynakları yükleyebilir. Bu davranış, belgelerinizi tüm ayrıntılarıyla işlemenize olanak tanır, ancak kitaplık bir web uygulamasının parçasıysa bazı güvenlik risklerinin nedeni olabilir.
Bu makalede, dış kaynakları yüklerken ortaya çıkabilecek yaygın güvenlik sorunlarına bir göz atıyoruz ve bu tür sorunların nasıl önleneceği konusunda önerilerde bulunuyoruz.
Dış kaynakları yüklerken bir dizi tipik güvenlik sorunu vardır.
Windows tabanlı ana bilgisayarlarda, ‘\example.com\a\b’ gibi UNC yollarını kullanan kaynaklara başvurular içeren belgeler varsayılan olarak işlenir. Bir etki alanı ortamında, bu, ana bilgisayarın etki alanı kimlik bilgilerini karma biçimde belirtilen sunucuya göndermesine neden olur.
Saldırgan, bir kullanıcıyı veya sunucuyu, denetlediği bir ana bilgisayara işaret eden böyle bir kaynak bağlantısına sahip bir belgeyi işlemeye ikna edebiliyorsa, saldırgan kullanıcı veya hizmet hesabı kimlik bilgilerini NTLM karma biçiminde alır. Bu tür veriler daha sonra klasik bir karma geçiş saldırısında yeniden kullanılabilir ve saldırganın mağdur kullanıcı veya hizmet hesabı olarak herhangi bir kaynağa erişmesine izin verir.
Söz konusu hesap zayıf veya tahmin edilebilir bir şifre kullanıyorsa, saldırgan ayrıca hesap şifresini daha fazla kötü amaçlı kullanım için kurtarmak için bir şifre kırma saldırısı gerçekleştirebilir.
Önceki duruma benzer şekilde, bir belgeyi yerel bir görüntü dosyasına referansla işlemek, o dosyanın son belgeye dahil edilmesine neden olur. Bu, hassas bilgilerin ifşa edilmesine yol açabilir.
Bir saldırgan, “dekompresyon bombaları” olarak adlandırılan son derece büyük görüntülere atıfta bulunan veya içeren bir belge yükleyebilir. Bu görüntüleri işlerken, kitaplık çok miktarda bellek ve CPU zaman tüketir.
Saldırgan, dahili IP adres ve bağlantı noktasının ortak kombinasyonlarına katıştırılmış bağlantılar içeren bir dizi belge oluşturabilir, ardından belgeleri işlemek için Aspose.Words kitaplığını kullanarak bunları bir web hizmetine gönderebilir.
Hizmetin belgeyi işlemek için kullandığı süreye bağlı olarak, saldırgan belirli bir IP / Bağlantı Noktası kombinasyonunun bir güvenlik duvarı tarafından filtrelenip filtrelenmediğini belirleyebilir:
Yukarıda açıklanan sorunları çözmek ve web uygulamalarının güvenliğini artırmak için IResourceLoadingCallback kullanarak harici kaynakların yüklenmesini kontrol edebilir veya devre dışı bırakabilirsiniz.
Aşağıdaki kod örneği, harici görüntülerin yüklenmesini nasıl devre dışı bırakacağınızı gösterir:
C++
class DisableExternalImagesHandler : public IResourceLoadingCallback
{
public:
ResourceLoadingAction ResourceLoading(System::SharedPtr<ResourceLoadingArgs> args) override
{
// Skip external images loading.
return args->get_ResourceType() == ResourceType::Image
? ResourceLoadingAction::Skip
: ResourceLoadingAction::Default;
}
};
void LoadDocument(const System::String& documentFilename)
{
auto disableExternalImagesHandler = System::MakeObject<LoadOptions>();
disableExternalImagesHandler->set_ResourceLoadingCallback(System::MakeObject<DisableExternalImagesHandler>());
auto doc = System::MakeObject<Document>(documentFilename, disableExternalImagesHandler);
}
Aşağıdaki kod örneği, uzak kaynakların nasıl devre dışı bırakılacağını gösterir:
C++
class DisableRemoteResourcesHandler : public IResourceLoadingCallback
{
static bool IsLocalResource(const System::String& originalUri)
{
// CodePorting.CsToCpp.Native.API can handle only absolute uri
auto uri = System::MakeObject<System::Uri>(originalUri);
if (uri->get_IsAbsoluteUri())
{
return uri->get_Scheme().Equals(u"file", System::StringComparison::OrdinalIgnoreCase);
}
return false;
}
public:
ResourceLoadingAction ResourceLoading(System::SharedPtr<ResourceLoadingArgs> args) override
{
return IsLocalResource(args->get_OriginalUri())
? ResourceLoadingAction::Default
: ResourceLoadingAction::Skip;
}
};
void LoadDocument(const System::String& documentFilename)
{
auto disableRemoteResourcesHandler = System::MakeObject<LoadOptions>();
disableRemoteResourcesHandler->set_ResourceLoadingCallback(System::MakeObject<DisableRemoteResourcesHandler>());
auto doc = System::MakeObject<Document>(documentFilename, disableRemoteResourcesHandler);
}
Analyzing your prompt, please hold on...
An error occurred while retrieving the results. Please refresh the page and try again.