全球大约70%的Web应用攻击都来自XSS攻击和SQL注入攻击。此外,常用的Web应用还包括CSRF、Session劫持等手段。
XSS攻击(跨站点脚本攻击):指黑客通过篡改网页,注入恶意HTML脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式。
攻击者诱使用户点击一个嵌入恶意脚本的链接,达到攻击的目的。
黑客提交含有恶意脚本的请求,保存在被攻击的Web站点的数据库中,用户浏览网页时,恶意脚本被包含在正常页面中,达到攻击目的。这种攻击经常使用在论坛,博客等Web应用中。
XSS攻击者一般都是通过在请求中嵌入恶意脚本达到攻击的目的,这些脚本是一般用户输入中不使用的,如果进行过滤和消毒处理,即对某些html危险字符转移,如“>”转义为">"等。为了避免对不必要的内容错误转义,如:“3<5”中的“<”需要进行文本匹配再转义,如:“
即浏览器禁止页面JS访问带有HttpOnly属性的cookie。HttpOnly并不是直接对抗XSS攻击的,而是防止XSS攻击者窃取cookie。对于敏感信息,可通过对该cookie添加HttpOnly属性,避免被攻击脚本窃取。
原理是攻击者在HTTP请求中注入恶意SQL命令,服务器用请求参数构造数据库SQL命令时,恶意SQL被一起构造,并在数据库中执行。
类似于SQL注入,在HTTP请求中注入OS命令,导致命令被恶意执行。
对请求参数进行消毒。通过正则匹配,过滤请求数据中可能注入的SQL。
使用预编译手段,绑定参数是最好的防SQL注入方法。目前许多数据访问层框架,如IBatis,Hibernate等,都实现SQL预编译和参数绑定,攻击者的恶意SQL会被当做SQL的参数,而不是SQL命令被执行。
CSRF(跨站点请求伪造),攻击者通过跨站请求,以合法用户身份进行非法操作,如转账交易、发表评论等。
CSRF的主要手段是利用跨站请求,在用户不知情的情况下,以用户身份伪造请求。其核心是利用了浏览器cookie或服务器session策略,盗取用户身份。
CSRF是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以。表单Token通过在请求参数中增加随机数的办法来阻止攻击者获得所有请求参数:在页面表单中增加一个随机数作为Token,每次响应页面的Token都不同,从正常页面提交的请求会包含该Token值,而伪造的请求无法获得该值,服务器检查请求参数中Token的值是否存在并且正确以确定请求提交者是否合法。
请求提交时,需要用户输入验证码,以避免在用户不知情的情况下被攻击者伪造请求。不过用户体验较差。
HTTP请求头的Referer域中记录着请求来源,可通过检查请求来源,验证其是否合法。如很多网站使用这个功能实现图片防盗链(如果图片访问的页面来源不是来自自己网站的网页就拒绝)
原理:即错误回显,许多Web服务器默认是打开异常信息输出的,即服务器末端处理的异常堆栈信息会直接输出到客户端浏览器。
防御:通过配置Web服务器参数,跳转500页面到专门的错误页面。Web应用常用的MCV框架也有这个功能。
原理:黑客根据注释寻找漏洞。
防御:程序最终发布前需要进行代码review或自动扫描,避免HTML注释漏洞。
原理:攻击者可能会上传可执行文件,以此攻击集群环境的其他机器。
防御:设置上传文件白名单,只允许上传可靠的文件类型。还可以通过修改文件名、使用专门的存储等手段保护服务器免受上传文件攻击。
原理:攻击者在请求的URL中使用相对路径,遍历系统未开放的目录和文件。
防御:将JS、CSS等资源文件部署在独立服务器、使用独立域名,其他文件不使用静态URL访问,动态参数不包含文件路径信息。
ModSecurity是一款开源的Web应用防火墙,能探测攻击并保护户Web应用程序,既可以嵌入到Web应用服务器中,也可作为一个独立的应用程序启动。
ModSecurity采用处理逻辑与攻击规则集合分离的架构模式。
处理逻辑(执行引擎):负责请求和响应的拦截过滤,规则加载执行等功能。
攻击规则集合:负责描述对具体攻击的规则定义、模式识别、防御策略等功能。
使用网站安全漏洞扫描工具,根据内置规则,构造具有攻击性的URL请求,模拟黑客攻击行为,用以发现网站安全漏洞。
为了保护网站的敏感数据,应用需要对这些信息进行加密处理,信息加密技术分为三种:单向散列加密、对称加密、非对称加密
单向散列加密是指通过对不同输入长度的信息进行散列计算,得到固定长度的输出,而无法逆向得到输入信息。
彩虹攻击可以进行暴力猜测式破解,为了加强单向散列计算的安全性,可以添加加密密钥,增加破解难度。
常见的单向散列算法:MD5、SHA等。
对称加密是指加密和解密使用的密钥是同一个密钥。
优点:算法简单,加解密效率高,系统开销小,适合对大量数据加密。
缺点:远程通信的情况下如何安全的交换密钥是个难题。
常见的对称加密算法:DES算法、RC算法等。
常用于cookie加密、通信加密等场合。
非对称加密是指加密和解密使用的密钥不是同一密钥,其中一个对外界公开,即公钥,另一个只有所有者知道,即私钥。使用公钥加密的信息必须使用私钥才能解开。
常键的非对称算法:RSA算法等。
常用于信息安全传输、数字签名等,HTTPS传输中浏览器使用的数字证书实质上是经过权威机构认证的非对称加密的公钥。
(1)把密钥和算法放在一个独立的服务器上,甚至做成一个专用的硬件设施,对外提供加密和解密服务,应用系统通过调用该服务,实现数据的加解密。
(2)将加解密算法放在应用系统中,密钥则放在独立服务器中,为了提高密钥安全性,实际存储时,密钥被切分成数片,加密后分别保存在不同的存储介质中,兼顾密钥安全性的同时有改善了性能
常用的信息过滤与反垃圾手段有以下几种:文本匹配、分类算法、黑名单
文本匹配主要解决敏感词过滤的问题。
适用于敏感词较少,用户提交信息文本长度也较短等场景。
本质是确定一个有限状态自动机,根据输入数据进行状态转移。Trie算法的优化版本双数组Trie算法利用两个稀疏数组存储树结构,base数组存储Trie树的节点,check数组进行状态检查。双数组Trie需要根据业务场景和经验确定数组大小,避免数组过大或冲突过多。
利用概率统计方法进行分类的算法,贝叶斯算法得到的分类判断是一个概率值,会存在误判和漏判。
对朴素贝叶斯算法增加特征值的关联依赖处理。
通过对关联规则的聚类挖掘。
将被报告的垃圾邮箱地址放入黑名单,然后针对邮件的发件人在黑名单列表中查找,如果查找成功,则过滤该邮件。
每个邮件地址使用8个字节的信息指纹
通过二进制列表和一组随机数映射函数实现。使用16G长度的二进制空间来存储,将一个邮箱地址加入黑名单时,使用8个随机映射函数(F1,F2,...,F8)得到0~16G范围内的8个随机数,从而将该邮箱地址映射到16G二进制存储空间的8个位置上,然后置1。检查一个邮箱地址是否在黑名单中时,使用同样的映射,如果其8个位都是1,则为黑名单成员。但存在误判。
【参考文献】大型网站技术架构核心原理与案例分析,李智慧,电子工业出版社