zoukankan      html  css  js  c++  java
  • 对网络安全性和apache shiro的一些认识

    更多信息,请参考:http://www.cxyeye.com/

    Apache Shiro 是什么?

    Shiro 是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障

    为什么要使用它?

    1:登陆验证是WEB应用中非常常见的一个功能;

    2:对于授权,大部分应用停留在判断session为空跳回登录首页的阶段,正确的做法是能根据用户的较色权限,授予不同用户不同目录的访问权限;

    3:客户端和服务端的数据传递,以及服务器之间的调用,敏感信息需要进行加密。目前很多应用甚至没有这个功能;

    4:验证,授权,加密,最好有一个统一的平台去完成这些功能,shiro就是这样一个解决方案;你可以自己去实现这些功能,但有成熟的开源的产品为什么不用呢?

    Apache Shiro 的一些核心思想

    1:配置文件定义的内容

    [main] 
    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
    
    [urls]
    /action/* = authc
    /admin/**=authc,perms[high]
    /system/**=authc,perms[high] 

    每个框架都会有自己的一些配置文件,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

    <filter>
        <filter-name>ShiroFilter</filter-name>
        <filter-class>
             org.apache.shiro.web.servlet.IniShiroFilter
        </filter-class>
        <!-- 没有init-param属性就表示从classpath:shiro.ini装入INI配置 --> 
    </filter>
    <filter-mapping>
        <filter-name>ShiroFilter</filter-name>
        <url-pattern>/*</url-pattern> 
    </filter-mapping>

    有一点可贵的是,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.csdn.net/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/

  • 相关阅读:
    Python 学习笔记 11.模块(Module)
    Python 学习笔记 8.引用(Reference)
    Python 学习笔记 9.函数(Function)
    Python 学习笔记 6.List和Tuple
    Python 学习笔记 4.if 表达式
    Python 学习笔记 2.自省
    Python 学习笔记 3.简单类型
    Python 学习笔记 7.Dictionary
    Python 学习笔记 5.对象驻留
    Python 学习笔记 10.类(Class)
  • 原文地址:https://www.cnblogs.com/duankaige/p/2978310.html
Copyright © 2011-2022 走看看