我聽說反射機制打破了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. 歸併 - 破壞性與非破壞性Java中
- 6. 破壞骨幹視圖是否會破壞它?
- 7. java註釋反射
- 8. 請解釋一下下面
- 9. 反射破壞封裝原理嗎?
- 10. 內存是否會被破壞?
- 11. 在java中反覆破壞二叉樹
- 12. 反射安全嗎?
- 13. Java反射(和註釋):bean.class是空的
- 14. Java斷言是否被破壞?
- 15. 是否有可能破壞上下文?
- 16. sscanf是否具有破壞性?
- 17. Java反射框架和安全
- 18. 是CALayer insertSublayer:atindex:破壞性的?
- 19. 授權後不會調用請求映射的Spring安全性
- 20. 請解釋一下代碼?
- 21. 請解釋一下代碼
- 22. 在mysql中,「解釋...」總是安全嗎?
- 23. NSMutableArray釋放/破壞
- 24. 如何檢查'破壞性'按鈕是否被按下(UIActionSheet-iPhone)?
- 25. 瀏覽器中的JavaScript是否有反射機制?
- 26. 會話安全性是否足夠用於java?
- 27. Java安全管理器是否會降低性能?
- 28. 非破壞性的全屏mobclix廣告
- 29. 請解釋一下golang類型是否按值傳遞
- 30. Java註釋反射排序
您可以訪問使用反射的對象的私人字段 – 2012-02-02 12:00:47
可能重複的[什麼是對象反射的安全風險?](http://stackoverflow.com/questions/3002904/what-is-the-security-risk-對象反射) – 2012-02-02 12:02:00