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 程序访问本地资源权限进行有限授权,这些安全角度的考虑 ...
随机推荐
- 复制相关参数学习笔记--master上的参数
特别声明: 所有的过滤规则不建议在主库上设置. server_id 是一个整数,范围:1 至 power(2,32)-1 之间. 推荐使用端口号+ip最后一位的方式. 唯一区别ID,同一个集群 ...
- xv6 gdb
The "remote" target does not support "run". https://sourceware.org/gdb/onlinedoc ...
- 正則表達式基础及java使用
正則表達式基础 正則表達式语法(1) 普通字符:字母,数字.汉子,下划线以及没有特殊定义的标点符号都是"普通字符".表达式中的普通字符.在匹配一个字符串的时候,匹配与之同样 ...
- SQLite编码
•SQLite编码 •讲师:李明杰 •技术博客:http://www.cnblogs.com/mjios •SQLite3 •在iOS中使用SQLite3,首先要添加库文件libsqlite3.dyl ...
- 创建数据库以及其属性的sql语句
创建数据库的SQL语句: create database stuDB on primary -- 默认就属于primary文件组,可省略 ( /*--数据文件的详细描写叙述--*/ name='stu ...
- Fiddler快速入门(还有一个功能就是不经过网络,直接模拟一个响应返回给客户端)
Fiddler是一个免费.强大.跨平台的HTTP抓包工具.Wireshark也是一个强大的抓包工具,不过Wireshark是一个通用的抓包工具,主要精力放在各种协议上了,针对HTTP的特定功能较少.所 ...
- Cordova各种事件
原文:Cordova各种事件 Cordova事件 Cordova框架了一组事件,开发者用来对某些运行Cordova应用的设备上的事件作出反应.事件处理的一种情况是硬件相关活动,如电池状态变化或用户按了 ...
- Android 它们的定义View
安卓开发过程,安卓官方控制有时来自往往不能满足我们的需求.这一次,我必须定义自己.下面我们就来看看他们的定义View: package com.example.myview; import andro ...
- SQL server添加链接服务器脚本
---恢复内容开始--- exec sp_addlinkedserver 'ZZSJK','','SQLOLEDB','192.168.10.22' --链接服务器名称 ‘’ ip地址exec s ...
- java 中的两个常用命令
这两个命令,分别为,javac 和java 实际操作如下图: