安全說明
Aspose.Words是一種高級Word文檔處理API,用于執行各種文檔管理和操作任務。API支持生成,修改,轉換,呈現和打印文檔,而無需在跨平臺應用程序中直接使用Microsoft Word。
Aspose API支持流行文件格式處理,并允許將各類文檔導出或轉換為固定布局文件格式和最常用的圖像/多媒體格式。
默認情況下,當使用 DocumentBuilder 導入文檔或插入圖像時,Aspose.Words for .NET 可以加載遠程資源,例如圖像、CSS 樣式或外部 HTML 文檔。此行為允許您詳細處理文檔,但如果該庫是 Web 應用程序的一部分,則可能會導致一些安全風險。
Aspose技術交流群(761297826)
Aspose.Words 不能用作防病毒軟件。因此,它不提供有關文檔中是否存在惡意組件的信息。為了確保您的數據安全,請自行檢查從外部來源獲取的文檔。反過來,Aspose.Words 提供了有關如何處理加載外部資源時可能出現的問題的建議。
安全問題
加載外部資源時存在許多典型的安全問題。
通過鏈接圖像泄露憑證
在基于 Windows 的主機上,默認情況下將處理包含對使用 UNC 路徑(例如“\example.com\a\b ”)的資源的引用的文檔。在域環境中,這將導致主機以散列格式將其域憑據發送到指定的服務器。
如果攻擊者能夠說服用戶或服務器處理具有指向他們控制的主機的資源鏈接的文檔,則攻擊者將收到 NTLM 哈希格式的用戶或服務帳戶憑據。然后,此類數據可以在經典的哈希傳遞攻擊中重復使用,從而允許攻擊者以受害者用戶或服務帳戶的身份獲得對任何資源的訪問權限。
如果相關帳戶使用弱密碼或可猜測的密碼,攻擊者還可以執行密碼破解攻擊來恢復帳戶密碼以供進一步惡意使用。
通過鏈接圖像公開本地圖像
與前面的情況類似,引用本地圖像文件處理文檔將導致該文件包含在最終文檔中。這可能會導致敏感信息泄露。
拒絕服務
攻擊者可以上傳引用或包含極大圖像的文檔,即所謂的“減壓炸彈”。在處理這些圖像時,該庫將消耗大量的內存和CPU時間。
通過鏈接內容偽造服務器端請求
攻擊者可以創建一系列包含內部 IP 地址和端口常見組合的嵌入式鏈接的文檔,然后使用 Aspose.Words 庫將它們提交到 Web 服務來處理這些文檔。
根據服務處理文檔的時間長度,攻擊者可以確定給定的 IP/端口組合是否被防火墻過濾:
-
較長的處理時間表明服務器發送的 TCP SYN 數據包被防火墻丟棄
-
快速處理時間表明已成功連接
安全問題解決方案
為了解決上述問題并提高Web應用程序的安全性,您可以使用IResourceLoadingCallback來控制或禁用外部資源的加載。
以下代碼示例顯示如何禁用外部圖像加載:
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);
點擊復制
以下代碼示例顯示如何禁用遠程資源:
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);
點擊復制
如需下載產品Aspose.Words ,請點擊產品名進入下載頁面