Web常见安全机制
按照一般WEB程序功能,可以归结为处理用户的访问和处理用户的输入。
(1)处理用户访问,也就是处理资源浏览的请求。从安全性角度,将资源又可抽象为授权资源和非授权资源,这里安全的定义就是用户不可获取非授权的资源。保证用户访问的安全机制主要有三种:身份验证、会话管理和访问控制。
身份验证,最常见的是登录功能,往往是提交用户名和密码,在安全性要求更高的情况下,有防止密码暴力破解的验证码,基于客户端的证书,物理口令卡等等。
会话管理,HTTP本身是无状态的,利用会话管理机制来实现连接识别。身份验证的结果往往是获得一个令牌,通常放在cookie中,之后对用户身份的识别根据这个授权的令牌进行识别,而不需要每次都要登陆。
访问控制,与程序的逻辑相关度大。比如一个多用户BLOG系统,每个用户有一个id,每篇blog都有id,只有BLOG的所有者才有权限更改,如果程序中仅对用户已登录做了校验,而没有细致到当前BLOG是否是该登录者所有,那么这就是一个典型的访问控制漏洞。“因为在前面浏览BLOG功能中是根据用户的id来获取BLOG集的,不大会出现这种当前登录者修改的是别人的BLOG的情况。”正是按照正常步骤来处理,导致可能存在大量安全漏洞,而访问控制的实施在各个功能中的处理中很难实现统一,所以对这项机制是否实施的检查也变得困难。
(2)处理用户输入。首先揭示一个误区,在我接触的人当中,还是有一部分人认为客户端对用户输入的校验已经足够。其实不然,使用一些工具比如浏览器插件或者代理服务器,完全可以绕过客户端校验,所以对于服务端来说,输入的数据都是不可信的。处理用户输入的安全机制主要有三种:黑名单,白名单,数据过滤(或净化)。
黑名单和白名单,顾名思义,在黑名单上的,一律拒绝;只有在白名单上的,才放行。
数据过滤,对一些特殊敏感字符,做一些编码或者去除的操作;对过长的数据进行截断的操作等。做好数据过滤,基本上能够防止参数操纵如SQL注入、跨站脚本等安全性问题。
浙公网安备 33010602011771号