我聽說反射機制打破了Java的安全性。請任何人都可以解釋它?訪問PRI:反射機制是否會破壞java中的安全性?請解釋一下
回答
你可以使用反射
例如
public class Foo {
private String privateString = null;
public Foo(String privateString) {
this.privateString = privateString;
}
}
Foo privateObject = new Foo("The Private Value");
Field privateStringField = Foo.class.
getDeclaredField("privateString");
privateStringField.setAccessible(true);
String fieldValue = (String) privateStringField.get(privateObject);
System.out.println("fieldValue = " + fieldValue);
請你可以把這裏的東西 – developer 2012-02-02 12:02:17
http://stackoverflow.com/questions/3567372/access-to-private-inherited-fields-via-reflection-in-java給出了一個示範。 – mcfinnigan 2012-02-02 12:03:59
添加了示例 – 2012-02-02 12:04:03
使用reflection你幾乎可以做任何事情進入私人領域對象的&方法瓦泰島變量由setting them as accessable,並修改不可變對象
一個常見的例子,是改變String:
public static void main(String[] args) throws Exception {
String s = "before";
System.out.println(s);
Field value = String.class.getDeclaredField("value");
value.setAccessible(true);
Field count = String.class.getDeclaredField("count");
count.setAccessible(true);
char[] after = {'a','f','t','e','r','\0' };
value.set(s, after);
count.set(s,5);
System.out.println(s);
}
在這個例子中 - 實際的字符串對象被改變了!
注意,使用反射來改變一個不可改變的對象有自己的問題,你可以在this post
顯然,如果反射API顯然打破了小應用程序的安全性看,有人已經注意到了。
首先我們需要一些上下文。通常情況下,Java平臺/可以/爲運行不可信代碼提供安全的環境(給出或採取奇怪的錯誤 - 如果你找到一個,請讓Oracle安全響應小組知道)。但是,Java的大部分用法都忽略了這一點。
安全運行時,反射API限制了不受信任的代碼可以做的事情,以簡化它可以在沒有反射的情況下執行的操作(除了一些標準的Java安全檢查之外,它還檢查直接調用方 - 請參閱Secure Coding Guidelines for the Java Programming Language)。例如,不受信任的代碼可以在同一個包中訪問「包私有」類,但不能訪問其他包中的包。
爲什麼要使用反射?通常是因爲它允許您代表某些客戶端代碼以相同的方式對一組開放式類型進行操作。客戶端代碼通常位於其他包中,但反射API將基於使用反射的代碼限制訪問。因此,除非反寫代碼能夠勝任編寫,否則客戶端代碼可以訪問,不應該被允許。這是一個豐富的漏洞來源。
當運行不安全時,您可以讀取/寫入文件,運行程序等,所以誰在乎?
- 1. 什麼是java中的破壞性和非破壞性方法?
- 2. C++ 11共享指針線程安全性是否被破壞?
- 3. Boost.Signals2破壞安全
- 4. .NET反射器的System.Runtime.Remoting.Channels.CoreChannel.GetMachineIP() - 請解釋
- 5. 節點的assert.Throws是否完全破壞?
- 6. 使用註釋來解釋Javascript中的函數是否「安全」?
- 7. cycle_key是否破壞以前的會話?
- 8. 歸併 - 破壞性與非破壞性Java中
- 9. 破壞骨幹視圖是否會破壞它?
- 10. java註釋反射
- 11. 請解釋在Java內存模型中闡述的初始化安全性
- 12. PHP - 會話隨機破壞
- 13. 請解釋一下下面
- 14. 請解釋一下這是給我的?
- 15. 反射破壞封裝原理嗎?
- 16. 如何檢查MS SQL服務器安全性是否被破壞?
- 17. 反射安全嗎?
- 18. CodeBlocks是否會破壞Dev studio項目?
- 19. 內存是否會被破壞?
- 20. 在java中反覆破壞二叉樹
- 21. Java反射(和註釋):bean.class是空的
- 22. Python屬性是否被破壞?
- 23. sscanf是否具有破壞性?
- 24. Java斷言是否被破壞?
- 25. 是否有可能破壞上下文?
- 26. 注射是否安全?
- 27. Java反射框架和安全
- 28. 請參閱Scala反射中的註釋
- 29. 的Java,C#和Prolog的反射機制
- 30. 是CALayer insertSublayer:atindex:破壞性的?
您可以訪問使用反射的對象的私人字段 – 2012-02-02 12:00:47
可能重複的[什麼是對象反射的安全風險?](http://stackoverflow.com/questions/3002904/what-is-the-security-risk-對象反射) – 2012-02-02 12:02:00