Java Class SecurityManager
# 前言
?
簡單了解 SecurityManager。具體查閱 API。
?
# What
?
它是 Java 沙盒模型控制安全的重要一個環節。它是 Java 的一個類。下面一段話源于SecurityManager API:
?
The security manager is a class that allows applications to implement a security policy. It allows an application to determine, before performing a possibly unsafe or sensitive operation, what the operation is and whether it is being attempted in a security context that allows the operation to be performed. The application can allow or disallow the operation.
?
安全管理器是一個類,允許應用實現一個安全策略。在執行一項可能不安全或者敏感操作之前,它允許應用去確定這個操作的內容以及這個操作是否允許去修改安全上下文。這個應用可也允許或者阻止該行為。
?
簡單的說,他規定了權限,類訪問權限,文件訪問權限等等,范圍很廣,你能想到的,它都有。只要在命令行運行時附加參數,或者在程序運行前設置該類即可。
?
# Why
?
至于使用這個類作為安全機制的原因:Java 原生安全機制,對于簡單應用,為什么不用?
?
至于使用場合,比如惡意的反射:
假設有個安全控制類:
public class Security {boolean security = true;
// 我是 private 方法,我不想被外人訪問!private void changeSecurity() {security = false;}public boolean getSecurity() {return security;}}
然后黑客想要修改安全:
import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Random;public class Main {public static void main(String[] args) {Class securityClass = Security.class;try {Security security = (Security) securityClass.newInstance();Method method = securityClass.getDeclaredMethod("changeSecurity");method.setAccessible(true); // 讓我訪問 private 方法System.out.println("Security level: " + security.getSecurity());method.invoke(security);System.out.println("Security level: " + security.getSecurity());} catch (Exception e) {e.printStackTrace();}}}
這是很邪惡的,一下子就把安全選項給關閉了。
?
# How
?
然而阻止黑客這么做很簡單,附加 SecurityManager 禁用反射即可:
import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Random;public class Main {public static void main(String[] args) {System.setSecurityManager(new SecurityManager()); // 設置了 SecurityManagerClass securityClass = Security.class;try {Security security = (Security) securityClass.newInstance();Method method = securityClass.getDeclaredMethod("changeSecurity");method.setAccessible(true);System.out.println("Security level: " + security.getSecurity());method.invoke(security);System.out.println("Security level: " + security.getSecurity());} catch (Exception e) {e.printStackTrace();}} }
?
?# Reference
?
http://docs.oracle.com/javase/8/docs/api/java/lang/SecurityManager.html SecurityManager API
?
轉載于:https://www.cnblogs.com/Piers/p/6600855.html
總結
以上是生活随笔為你收集整理的Java Class SecurityManager的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [SCOI2007]修车
- 下一篇: 《DSP using MATLAB》示例