bdjhx 发表于 2015-8-3 10:28:35

对网络安全性和apache shiro的一些认识

  更多信息,请参考:http://www.cxyeye.com/
  Apache Shiro 是什么?
  Shiro 是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障
  为什么要使用它?
  1:登陆验证是WEB应用中非常常见的一个功能;
  2:对于授权,大部分应用停留在判断session为空跳回登录首页的阶段,正确的做法是能根据用户的较色权限,授予不同用户不同目录的访问权限;
  3:客户端和服务端的数据传递,以及服务器之间的调用,敏感信息需要进行加密。目前很多应用甚至没有这个功能;
  4:验证,授权,加密,最好有一个统一的平台去完成这些功能,shiro就是这样一个解决方案;你可以自己去实现这些功能,但有成熟的开源的产品为什么不用呢?
  Apache Shiro 的一些核心思想
  1:配置文件定义的内容




ds = com.mysql.jdbc.jdbc2.optional.MysqlDataSource
ds.serverName = 127.0.0.1
ds.user = root
ds.password = root
ds.databaseName = test
ds.url = jdbc:mysql://127.0.0.1:3306/test
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.permissionsLookupEnabled = true
jdbcRealm.authenticationQuery = SELECT password FROM ho_user WHERE name = ?
jdbcRealm.userRolesQuery = SELECT role FROM ho_user WHERE name = ?
jdbcRealm.permissionsQuery = SELECT permission FROM ho_user WHERE name = ?
jdbcRealm.dataSource = $ds
authc.loginUrl = /common/login.jsp
perms.unauthorizedUrl = /common/login.jsp
roles.unauthorizedUrl = /common/login.jsp

/action/* = authc
/admin/**=authc,perms
/system/**=authc,perms 
  每个框架都会有自己的一些配置文件,shiro的配置是基于key-value。
  1:定义验证用户的SQL
  2:定义获取用户角色的SQL
  3:定义获取用户权限的SQL
  4:定义验证不通过时返回的页面
  5:定义需要授权的目录以及授权条件
  2: 验证用户登陆的异常思想



try {
currentUser.login(token);
} catch (IncorrectCredentialsException ice) {

} catch (LockedAccountException lae) {

}

catch (AuthenticationException ae) {…
}
  通过异常机制判断用户的验证结果
  3:哈希和加密的简单实用,哈希和加密用于确保数据传输过程中对敏感数据的保护。当保护需要转换回来时需要用加密,反之用哈希;保护不仅对字符有效,对文件二进制的数据一样有效。
  哈希是不可逆的,哈希的结果长度无关跟原值无关 (例如文件的哈希)



String hex = new Md5Hash(myFile).toHex();
  加密是可逆的;加密随着原值长度线性增长。



AesCipherService cipherService = new AesCipherService();
cipherService.setKeySize(256);
//创建一个测试密钥:
byte[] testKey = cipherService.generateNewKey();
//加密文件的字节:
byte[] encrypted = cipherService.encrypt(fileBytes, testKey);
  4: web支持(一般框架都是接触这种方式,servlet或者filter)




ShiroFilter

org.apache.shiro.web.servlet.IniShiroFilter




ShiroFilter
/*

  有一点可贵的是,shiro的会话管理,它可以在系统的任何位置,通过工厂的方式,得到当前对话的session
  Session session = subject.getSession();
  session.getAttribute("key", someValue);
  总结
Shiro为解决下列问题(我喜欢称它们为应用安全的四要素)提供了保护应用的API:
  认证 - 用户身份识别,常被称为用户“登录”;
  授权 - 访问控制;
  密码加密 - 保护或隐藏数据防止被偷窥;
  会话管理 - 每用户相关的时间敏感的状态
  以下是对安全性的一些认识:
  1:目录是否有严格的访问限制
  2:验证码是否符合标准,会话超时时间,注销session的清空,登录用户暴力测试的锁定;
  3:用户名,密码等敏感信息的HTTPS 加密传输
  4:文件上传下载的 类型限制;目录限制安全
  5:系统配置文件,日志安全
  摘录:
  让Apache Shiro保护你的应用 http://www.infoq.com/cn/articles/apache-shiro
  Apache Shiro在Web中的应用 http://blog.iyunv.com/stuqbx/article/details/7178406
  apache shiro 管理用户权限与数据库交互 http://www.open-open.com/doc/view/453bc4f22d83435ab2bfb6768c41ac90
  Apache Shiro 使用手册 http://www.open-open.com/doc/view/8cf6f10a10d0497cbcbc3a9931354c62
  更多信息,请参考:http://www.cxyeye.com/
页: [1]
查看完整版本: 对网络安全性和apache shiro的一些认识