安全 - 118web/118 GitHub Wiki

为Web应用添加安全性防护策略

分层

网络应用服务安全可以分为如下四层。

  • 网络与应用平台安全:主要包括网络的可靠性与生存行与信息系统的可靠性和可用性。网络的可靠性与生存行依靠环境安全、物理安全、节点安全、链路安全、拓扑安全、系统安全等方面来保障。信息系统的可靠性和可用性可以参照计算机系统安全进行。
  • 应用服务提供安全:主要包括应用服务的可用性与可控性。服务可控性依靠服务接入安全以及服务防否认、服务防攻击、国家对应用服务的管制等方面来保障。服务可用性与承载业务网络可靠性以及维护能力等相关。
  • 信息加工和传递安全:主要包括信息在网络传输和信息系统存储时完整性、机密性和不可否认性。信息完整性可以依靠报文鉴别机制,例如哈希算法等来保障,信息机密性可以依靠加密机制以及密钥分发等来保障,信息不可否认性可以依靠数字签名等技术来保障。
  • 信息内容安全:主要指通过网络应用服务所传递的信息内容不涉及危害国家安全,泄露国家秘密或商业秘密,侵犯国家利益、公共利益或公民合法权益,从事违法犯罪活动。

实体划分与分析

网络应用服务安全分析中涉及到如下几个实体:

  • 信息发送者,通过网络发送信息的实体,可以是ICP或者发送信息的个人。
  • 平台提供者,网络应用的提供者,通信的双方(多方)通过应用平台交互信息。
  • 通道提供者,为信息发送者、信息接收者和平台提供者提供接入网络的手段以及网络层面的互通。
  • 信息接收者,网络接收信息的实体。设备制造商,为信息发送者、信息接收者、平台提供者、通道提供者提供软硬件设备。
  • 业务监管者,监管网络应用的安全,主要包括业务安全以及内容安全

Spring Security

  • Spring Security对Web安全性的支持大量地依赖于Servlet过滤器。这些过滤器拦截进入请求,并且在应用程序处理该请求之前进行某些安全处理。 * Spring Security提供有若干个过滤器,它们能够拦截Servlet请求,并将这些请求转给认证和访问决策管理器处理,从而增强安全性。根据自己的需要,可以使用表7.4中所列的几个过滤器来保护自己的应用程序。
  • 如果使用过Servlet过滤器且令其正常工作,就必须在Web应用程序的web.xml文件中使用 和元素配置它们。虽然这样做能起作用,但是它并不适用于使用依赖注入进行的配置。
  • FilterToBeanProxy是一个特殊的Servlet过滤器,它本身做的工作并不多,而是将自己的工作委托给Spring应用程序上下文 中的一个Bean来完成。被委托的Bean几乎和其他的Servlet过滤器一样,实现javax.servlet.Filter接 口,但它是在Spring配置文件而不是web.xml文件中配置的。
  • 实际上,FilterToBeanProxy代理给的那个Bean可以是javax.servlet.Filter的任意实现。这可以是 Spring Security的任何一个过滤器,或者它可以是自己创建的一个过滤器。但是正如本书已经提到的那样,Spring Security要求至少配置四个而且可能一打或者更多的过滤器。

Shiro

三个核心组件:Subject, SecurityManager 和 Realms.

  • Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。但考虑到大多数目的和用途,你可以把它认为是Shiro的“用户”概念。
  • Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。
  • SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。
  • Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。
  • 从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。
  • Shiro内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库(JDBC)、类似INI的文本配置资源以及属性文件等。如果缺省的Realm不能满足需求,你还可以插入代表自定义数据源的自己的Realm实现。
⚠️ **GitHub.com Fallback** ⚠️