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()); // 设置了 SecurityManager
Class 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
Java Class SecurityManager的更多相关文章
- java.lang.SecurityManager、java.security包
学习java大概3年多了,一直没有好好研究过java安全相关的问题,总是会看到 SecurityManger sm = System.getSecurityManager(); if(sm!=null ...
- java安全管理器SecurityManager入门
table { margin-left: 30px; width: 95%; border: 1px; border-collapse: collapse } img { border: 1px so ...
- Using Java SecurityManager to grant/deny access to system functions
In Java it is possible to restrict access to specific functions like reading/writing files and syste ...
- java基础系列--SecurityManager入门(转)
转载作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/yiwangzhibujian/p/6207212.html 一.文章的目的 这是一篇对Java安全管理器入门的文 ...
- Java安全管理器——SecurityManager
总的来说,Java安全应该包括两方面的内容,一是Java平台(即是Java运行环境)的安全性:二是Java语言开发的应用程序的安全性.由于我们不是Java本身语言的制定开发者,所以第一个安全性不需要我 ...
- java线程基础知识----SecurityManager类详解
在查看java Thread源码的时候发现一个类----securityManager,虽然很早就知道存在这样一个类但是都没有深究,今天查看了它的api和源码,发现这个类功能强大,可以做很多权限控制策 ...
- java安全管理器SecurityManager
本文转载自java安全管理器SecurityManager 导语 这是一篇对Java安全管理器入门的文章,目的是简单了解什么是SecurityManager,对管理器进行简单配置,解决简单问题. 比如 ...
- Java基础知识【上】(转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- JAVA安全模型
作为一种诞生于互联网兴起时代的语言,Java 从一开始就带有安全上的考虑,如何保证通过互联网下载到本地的 Java 程序是安全的,如何对 Java 程序访问本地资源权限进行有限授权,这些安全角度的考虑 ...
随机推荐
- 如何编辑SDE数据库(转载)
转自原文 如何编辑SDE数据库(转载) 如何编辑SDE数据(转自ESRI中国社区) (2008-12-15 17:26:41) 很多刚入门的朋友对SDE数据并不太了解,接二连三的在社区里面发问,有时也 ...
- 忙里偷闲( ˇˍˇ )闲里偷学【C语言篇】——(6)动态内存分配
一.传统数组的缺点: 1.数组的长度必须事先定制,且只能是常整数,不能是变量 int len = 5; int a[len]; //error 2.传统形式定义的数组,该程序的内存程序员无法手动释放 ...
- [React] Pass Data To Event Handlers with Partial Function Application
In this lesson we’ll see how to pass an item’s id value in an event handler and get the state to ref ...
- Java实现的并发任务处理实例
本文实例讲述了Java实现的并发任务处理方法.分享给大家供大家参考,具体如下: public void init() { super.init(); this.ioThreadPool = new T ...
- python2.x脚本转换为python3.x脚本的方法
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/dushu990/article/details/73549174 python2.x脚本转换为pyt ...
- 一个2013届毕业生(踏上IT行业)的迷茫(4)
等了大概三个月,终于到9月份了,以前没有出过远门,这次要去西安上学,一个人父母还是不放心,带了几件衣服就和父亲匆匆去坐火车,这一路有多少个第一次啊,第一次和父亲一块坐车.第一次坐火车.第一次出县城.第 ...
- 将字符串转换成xml并取得对应的值
如数据库中有一个字段保存了xml格式的一串字符串: <?xml version="1.0" encoding="utf-16"?><Array ...
- Spring Boot中集成Spring Security 专题
check to see if spring security is applied that the appropriate resources are permitted: @Configurat ...
- Qt::WindowFlags枚举类型(Qt::Widget是独立窗口和子窗口两用的,Qt::Window会有标题栏)
Qt::Widget : QWidget构造函数的默认值,如新的窗口部件没有父窗口部件,则它是一个独立的窗口,否则就是一个子窗口部件. Qt::Window : 无论是否有父窗口部件,新窗口部件都是一 ...
- 各种图示的介绍及绘制(boxplot、stem)
1. 箱线图(boxplot) 也叫作箱形图: 一种用作显示一组数据分散情况资料的统计图.因形状如箱子而得名.在各种领域也经常被使用,常见于品质管理. 主要包含六个数据节点,将一组数据从大到小排列,分 ...