Java云服务开发之Java安全类库常见问题解答

举报
breakDawn 发表于 2020/11/22 11:35:52 2020/11/22
【摘要】 Q:有几种方式可以启动安全管理器?A:两种方式隐式启动: 启动命令里加-Djava.security.manager, 即可开启安全管理器。显示启动: 代码里自己new一个SecurityManager或者继承一个新子类, 然后用System.setSecurityManager(xxxSecurityManager)来设置看以下代码:public class SecurityManager...

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里的源码:

image.png


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的后面

image.png


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:

  • 生日判定,可以快速找到一个口令

  • 可以利用事先计算好的哈希列表几秒钟破解。



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。