Come posso rendere un oggetto / classe inaccessibile a Reflection

1

Sto costruendo un'API per minecraft chiamata Quantum API . Sappiamo tutti che la riflessione può essere usata per fare cose spiacevoli alle classi e persino causare comportamenti indefiniti se usati senza cura.

C'è un modo per rendere le classi e gli oggetti immuni alla riflessione? Forse con un responsabile della sicurezza? O viceversa, limita un certo elenco di classi / oggetti dall'uso del reflection?

Il mio utilizzo sarebbe di evitare che altre mod caricate con questa API utilizzino reflection per modificare una RuntimePermission in un SecurityManager e per impedire la modifica delle classi di base (e oggetti) di minecraft in fase di runtime, nonché delle classi proprie dell'API (e oggetti).

    
posta AMDG 20.06.2015 - 19:44
fonte

1 risposta

1

Suggerirei di utilizzare offuscamento . Non impedisce il riflesso, ma lo renderà praticamente impossibile (tecnicamente, qualcuno potrebbe ancora farlo ma ci vorrà molto più sforzo per capirlo) per qualcuno da capire quale parte del codice fa quello che, come sarà (tra le altre cose) criptare i nomi delle funzioni.

In genere puoi impostare esclusioni, ad esempio funzioni che devono essere accessibili pubblicamente per un'API.

Sfortunatamente, funzionerà solo con il tuo codice personale, e non con Minecraft stesso, ma è la soluzione pratica migliore che riesca a pensare.

Altrimenti, penso che potrebbe esserci una soluzione che implica la creazione di un caricatore personalizzato per Minecraft con un SecurityManager che sandbox tutto e impedisce la riflessione, ma non sono del tutto sicuro se è possibile. Potresti voler dare un'occhiata a questa domanda su StackOverflow che discute quella possibilità ulteriormente.

    
risposta data 21.06.2015 - 14:57
fonte

Leggi altre domande sui tag