2013-04-06 51 views
0
System.exit(0); or 
System.exit(2); 

是posiible沒有錯誤與System.exit(0),而在安全管理補助可能

java -Djava.security.manager -Djava.security.policy==app.policy -cp bin pl.com.App 

app.policy執行, 運行:

grant { 
     permission java.io.FilePermission "./*", "read,write"; 
     permission java.net.SocketPermission "localhost:18080", "accept, connect, listen"; 
     //permission java.util.PropertyPermission "java.home", "read"; 
}; 

寫安全管理到文件正常工作,當我從app.policy刪除授予,我正確地得到異常時執行新的FileWriter(「out.txt」);

C:\ workspace_tomcat \的SecureWeb> Java的版本

java version "1.6.0_29" 
Java(TM) SE Runtime Environment (build 1.6.0_29-b11) 
Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode) 

當我運行 System.exit(0);在帶有安全管理器的Tomcat下webapp中的 ,我正確地得到異常。

+1

請問你能說出你的問題嗎? – 2013-04-06 18:30:50

+0

爲什麼在沒有適當授權的情況下在安全管理器下運行時,System.exit(0)毫無例外地可以執行(permission java.lang.RuntimePermission「exitVM.0」)? – bastiat 2013-04-07 10:02:50

回答

2

的Javadoc狀態(http://docs.oracle.com/javase/7/docs/technotes/guides/security/permissions.html):

注: 「exitVM *」 權限自動授予從應用程序類路徑加載所有的代碼,從而使應用程序終止自己

當您將代碼作爲獨立應用程序運行時,這適用。 同樣適用於Tomcat - 它可能會自行關閉。 但是這是不是擴展到在Tomcat容器內運行的程序。這些程序完全由Tomcat安全管理器控制:(http://tomcat.apache.org/tomcat-7.0-doc/security-manager-howto.html

+0

Alex,thx尋求幫助,我是(錯)由http://docs.oracle.com/javase/6/docs/api/java/lang/SecurityManager.html#checkExit%28int%29 – bastiat 2013-04-07 21:54:50

+0

建議我必須原諒自己,我並不那麼懶,甚至我已經讀過自己而不是javadoc,但是對於java 6(我使用它),並且它僅指出:這允許攻擊者通過自動強制虛擬機來裝入拒絕服務攻擊停止。 http://docs.oracle.com/javase/6/docs/technotes/guides/security/permissions.html – bastiat 2013-04-07 22:02:06

+0

亞歷克斯,在安全管理的主題,你能否也看到http://stackoverflow.com/questions/15868534/why -security-manager-doesnt-forbid-both-creating-new-thread-nor-starting-i,thx advance – bastiat 2013-04-07 22:21:48