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/

  • 相关阅读:
    利用反射获取类的所有字段
    System.Data.Entity.Internal.AppConfig 类型初始值设定项引发异常
    sql server 修改列类型
    sql server 删除表字段和字段的约束
    sql server 查找字段上的约束
    ASP.NET MVC自定义路由
    初探pandas——索引和查询数据
    初探pandas——安装和了解pandas数据结构
    初探numpy——numpy常用通用函数
    初探numpy——广播和数组操作函数
  • 原文地址:https://www.cnblogs.com/duankaige/p/2978310.html
Copyright © 2011-2022 走看看