Keamanan Aplikasi Web Saat Memuat Sumber Daya Eksternal

Login Aspose.Words Sitemap Java dapat memuat sumber daya jarak jauh seperti gambar, gaya CSS, atau dokumen HTML eksternal ketika mengimpor dokumen atau memasukkan gambar menggunakan DocumentBuilder. Perilaku ini memungkinkan Anda untuk memproses dokumen Anda secara rinci tetapi dapat menjadi alasan beberapa risiko keamanan jika perpustakaan adalah bagian dari aplikasi web.

Dalam artikel ini, kami melihat masalah keamanan umum yang dapat timbul ketika memuat sumber daya eksternal dan memberikan rekomendasi tentang cara menghindari masalah tersebut.

Masalah Keamanan

Ada sejumlah masalah keamanan khas ketika memuat sumber daya eksternal.

Pengungkapan rahasia Via Gambar Bertautan

Sitemap Windows- host berbasis, dokumen yang berisi referensi ke sumber daya yang menggunakan jalur UNC seperti * ‘\example.com\a\b* akan diproses secara default. Dalam lingkungan domain, ini akan menyebabkan host untuk mengirim kredensial domain dalam format hashed ke server yang ditentukan.

Jika penyerang dapat meyakinkan pengguna atau server untuk memproses dokumen dengan tautan sumber daya yang menunjuk ke host yang mereka kendalikan, penyerang akan menerima kredensial akun pengguna atau layanan dalam format hash NTLM. Data tersebut kemudian dapat digunakan kembali dalam serangan pass-the-hash klasik, memungkinkan penyerang untuk mendapatkan akses ke sumber daya apa pun sebagai pengguna korban atau akun layanan.

Jika akun yang dimaksud menggunakan kata sandi yang lemah atau menebak, penyerang juga dapat melakukan serangan retak kata sandi untuk memulihkan kata sandi akun untuk penggunaan berbahaya lebih lanjut.

Pengungkapan Gambar Lokal Via Gambar Bertautan

Mirip dengan kasus sebelumnya, memproses dokumen dengan referensi ke file gambar lokal akan menghasilkan file yang dimasukkan dalam dokumen akhir. Ini dapat menyebabkan pengungkapan informasi sensitif.

Sitemap

Penyerang dapat mengunggah dokumen yang baik direferensikan atau memasukkan gambar yang sangat besar - yang disebut “bom pendekompresi”. Saat memproses gambar ini, perpustakaan akan mengonsumsi sejumlah besar memori dan waktu CPU.

Server-Side Request Forgery Via Konten Bertautan

Penyerang dapat membuat serangkaian dokumen yang mengandung tautan tertanam untuk kombinasi umum alamat IP internal dan port, kemudian kirimkan ke layanan web menggunakan Aspose.Words perpustakaan untuk memproses dokumen.

Berdasarkan panjang waktu penggunaan layanan untuk memproses dokumen, penyerang dapat menentukan apakah kombinasi IP / port yang diberikan disaring oleh firewall:

  • waktu pemrosesan yang lebih lama menunjukkan bahwa paket TCP SYN dikirim oleh server dijatuhkan oleh firewall
  • waktu pemrosesan cepat menunjukkan koneksi yang sukses telah dibuat

Solusi Masalah Keamanan

Untuk memecahkan masalah yang dijelaskan di atas dan untuk meningkatkan keamanan aplikasi web, Anda dapat mengontrol atau menonaktifkan pemuatan sumber daya eksternal menggunakan IResourceLoadingCallbackSitemap

Contoh kode berikut menunjukkan cara menonaktifkan pemuatan gambar eksternal:

Java

public void loadDocument(String documentFilename) throws Exception
{
	LoadOptions disableExternalImagesOptions = new LoadOptions();
	disableExternalImagesOptions.setResourceLoadingCallback(new DisableExternalImagesHandler());

	Document doc = new Document(documentFilename, disableExternalImagesOptions);
}

public static class DisableExternalImagesHandler implements IResourceLoadingCallback
{
	public /*ResourceLoadingAction*/int resourceLoading(ResourceLoadingArgs args)
	{
		// Skip external images loading.
		return (args.getResourceType() == ResourceType.IMAGE)
			? ResourceLoadingAction.SKIP
			: ResourceLoadingAction.DEFAULT;
	}
}

Contoh kode berikut menunjukkan cara menonaktifkan sumber daya jarak jauh:

Java

public void loadDocument2(String documentFilename) throws Exception
{
	LoadOptions disableRemoteResourcesOptions = new LoadOptions();
	disableRemoteResourcesOptions.setResourceLoadingCallback(new DisableRemoteResourcesHandler());
	
	Document doc = new Document(documentFilename, disableRemoteResourcesOptions);
}	

private static class DisableRemoteResourcesHandler implements IResourceLoadingCallback
{
	public /*ResourceLoadingAction*/int resourceLoading(ResourceLoadingArgs args) throws Exception
	{
		return isLocalResource(args.getOriginalUri())
			? ResourceLoadingAction.DEFAULT
			: ResourceLoadingAction.SKIP;
	}

	// Simplified code.
	private static boolean isLocalResource(String fileName) throws Exception
	{
		String protocol = null;
	
		URI uri = new URI(fileName);
		if (uri.isAbsolute())
		{
			protocol = uri.getScheme();
		}
		else
		{
			URL url = new URL(fileName);
			protocol = url.getProtocol();
		}
	
		return "file".equalsIgnoreCase(protocol);
	}
}