Java云服务开发之Java安全类库常见问题解答
Q:有几种方式可以启动安全管理器?
A:两种方式
隐式启动: 启动命令里加-Djava.security.manager, 即可开启安全管理器。
显示启动: 代码里自己new一个SecurityManager或者继承一个新子类, 然后用System.setSecurityManager(xxxSecurityManager)来设置
看以下代码:
public class SecurityManagerTest { 2 public static void main(String[] args) throws FileNotFoundException { 3 System.out.println(System.getProperty("file.encoding")); 4 } 5 }
Q: 先问不启动的情况。如果我什么没搞,直接跑这个代码,会报权限错误吗?
A:
不会报错误。 如果隐式和显示启动都没做,那么System里的SecurityManager就是null,那么就不会进行检查。
可以看下System.getProperty里的源码:
Q: 隐式启动中,如果只配了-Djava.security.manager ,但没有配-Djava.security.policy, 那么上面的文件以及系统配置是都允许读,还是都不允许读?
A:
都不允许读。 即开启后,不在policy允许范围内的,都默认不允许读。
如果要允许读文件以及读file.encoding那个系统配置, 需要加上-Djava.security.policy=xxx.policy , 指明policy文件。
文件里大概长这样
grant { permission java.util.PropertyPermission "file.encoding", "read"; };
注意policy是拼在-Djava.security.manager的后面
Q: 显示启动,就是自己new一个SecurityManager,并set进去。
1 public static void main(String[] args) { 2 System.setSecurityManager(new SecurityManager()); 3 System.out.println(System.getProperty("file.encoding")); 4 }
如果我之前有隐式启动,此时new了一个新的SecurityManager放进去,此时是否还有该属性的read权限?
A:
没有了,之前由启动参数配进去的安全管理器已经被你覆盖掉了
对于隐式启动和显示启动, 都是默认没有任何可用权限!
都是白名单机制, 无黑名单机制。
常见的java 安全权限,都是能从名字就知道什么作用的,瞄一眼有个印象就行,大概知道java里这些功能可能都会有权限。
java.security.AllPermission 所有权限的集合
java.util.PropertyPermission 系统/环境属性权限
就是System.getProperty(xxx.xxx.xxx)的权限java.lang.RuntimePermission 运行时权限
这个安卓用的很多,java.net.SocketPermission Socket权限
java.io.FilePermission 文件权限,包括读写,删除,执行
java.io.SerializablePermission 序列化权限
java.lang.reflect.ReflectPermission 反射权限
java.security.UnresolvedPermission 未解析的权限
java.net.NetPermission 网络权限
java.awt.AWTPermission AWT权限
java.sql.SQLPermission 数据库sql权限
java.security.SecurityPermission 安全控制方面的权限
java.util.logging.LoggingPermission 日志控制权限
javax.net.ssl.SSLPermission 安全连接权限
javax.security.auth.AuthPermission 认证权限
javax.sound.sampled.AudioPermission 音频系统资源的访问权限
Q:对口令做哈希时,最好加颜值。原因是什么?
A:
盐值至少应该包含8字节而且必须是由安全随机数产生。( 例如如果问你,sha256+4字节盐值,那肯定就是错误的!)
应使用强哈希函数,推荐使用SHA-256或者更加安全的哈希函数。
迭代次数默认推荐10000次,对于性能有特殊要求(比如嵌入式系统)的产品低可迭代1000次。
对于抠像单向哈希时,其输出长度应该不小于256比特。
Q:不加盐值的哈口令哈希有什么缺陷?
A:
生日判定,可以快速找到一个口令
可以利用事先计算好的哈希列表几秒钟破解。
- 点赞
- 收藏
- 关注作者
评论(0)