前言
Web应用程序的基本安全问题(所有用户输入都不可信)需要使用大量安全机制来地域攻击,这些机制由以下几个核心因素构成:
- 访问控制
- 过滤/限制输入
- 监控(正常指标)
- 安全产品(WAF)
一个典型应用程序的绝大多数受攻击面也由这些机制构成,即攻击者通过利用这些机制的缺陷进行漏洞利用。下面了解一下这下安全机制。
一、访问控制
大多数Web应用程序使用三层相互关联的安全机制处理用户访问:
- 身份验证
- 会话管理
- 访问控制(实现)
身份验证
身份验证机制是应用程序处理用户访问的最基本机制。验证用户是指确定用户的真实身份。今天,绝大多数Web应用程序都采用传统的身份验证模型,即要求用户提交用户名与密码,再由应用程序对其进行核实,确认其合法性
会话管理
成功登录应用程序后,用户会访问各种页面和功能,从浏览器发出一些列HTTP请求 。与此同时,服务端还会收到各类用户发出的无数请求。为实施有效的访问控制,应用程序需要识别并处理每一名用户提交的各种请求。
为满足以上需求,几乎所有Web应用程序都为每一位用户建立一个会话,并向用户发布一个标识会话的令牌。会话本身是一组保存在服务器上的数据结构,用于追踪用户与应用程序的交互状态
。令牌是一个唯一的字符串,应用程序将其映射到会话中(如cookie)
。当用户收到一个令牌时,浏览器会在随后的HTTP请求中将它返回给服务器,帮助应用程序将请求与该用户联系起来。
访问控制
二、处理用户输入
基本安全问题:所有用户输入都不可信。大量针对Web应用程序的不同攻击都与提交错误输入有关。输入确认(input validation)是防御这些攻击的必要手段。
输入处理方法
- 拒绝已知的不良输入——黑名单
- 接受已知的正常输入——白名单
- 净化——输入处理函数、编码、转义
- 安全数据处理——安全的编程方法(数据库访问过程使用正确的参数化查询,避免应用程序功能设计不安全的做法)
- 语法检查——鉴权
边界确认
服务端应用程序的每一个单独的组件或功能单元将其输入当做来自潜在恶意来源的输入对待。除客户端与服务器奇之间的外部边界外,应用程序在上述每一个信任边界上执行数据确认。
(1)应用程序收到用户的登录信息。表单处理程序确认每个输入仅包含合法字符,符合特殊的长度限制,并且不包含已知的攻击签名。
(2)应用程序执行一个SQL查询检验用户证书。为防止SQL注入,在执行查询前,应用程序对用户输入中包含的可用于攻击数据库的所有字符进行转义。
(3)如果用户成功登录,引用程序再将用户资料中的某些数据传送给SOAP服务,进一步获得用户账户的有关信息。为防止SOAP注入攻击,需要对用户资料中的任何XML元字符进行适当编码。
(4)应用程序在用户的浏览器中显示用户的账户信息。为防止跨站脚本攻击,应用程序对植入返回页面的任何用户提交的数据执行HTML编码。
来源
《黑客攻防技术宝典Web实战篇》