Pertanyaan Paket Ekspor Aman ke Modul Java


Saya menjawab ini pertanyaan, di mana saya merekomendasikan memanfaatkan exports to sintaks untuk mencegah konsumen eksternal mengakses kode yang dimaksudkan untuk penggunaan internal antar modul.

Tetapi pada refleksi lebih lanjut, satu-satunya pemeriksaan keamanan nyata yang diterapkan modul adalah cocok dengan nama. Pertimbangkan contoh ini di mana saya mengimplementasikan dua modul:

module a {
    exports unsafe to b
}

module b {
    requires a
}

Paket unsafe berisi kode yang tidak aman untuk diekspos. Apakah ada cara untuk melakukannya dengan aman mengekspor ini ke modul internal tanpa memaparkan mereka secara eksternal?

Dalam contoh di atas, entitas jahat hanya dapat memberi nama modul mereka b dan akan mendapatkan akses ke kode (tidak aman). Itu JLS sepertinya tidak menjelaskan apa pun yang bisa mencegahnya.


5
2018-02-12 15:17


asal


Jawaban:


The hashing dari modul sebagai ditunjuk oleh Alan akan bekerja dalam kasus Anda. Meskipun saya pribadi suka deskripsi dan contoh dari JMOD alat yang langsung menjawab pertanyaan Anda:

Dengan --hash-modules opsi atau jmod perintah hash, Anda bisa, di   setiap deskriptor modul, mencatat hash dari isi modul   yang diizinkan bergantung padanya, jadi "mengikat" bersama-sama ini   modul.

Ini memungkinkan Anda untuk melakukannya izinkan paket untuk diekspor ke satu atau   modul yang lebih spesifik dan tidak ada yang lain melalui kualifikasi   ekspor. Waktu proses memverifikasi jika hash tercatat dari suatu modul cocok   yang diselesaikan pada waktu berjalan; jika tidak, waktu proses mengembalikan kesalahan.


6
2018-02-12 15:39