针对Web应用的攻击模式
简单的HTTP协议本身不存在安全性问题,因此协议本身几乎不会成为攻击的对象。应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标。
主动攻击
主动攻击是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到那些资源。主动攻击模式里具有代表性的攻击是SQL注入攻击和OS命令注入攻击
SQL注入攻击
SQL注入(SQL Injection)是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击(这年头SQL注入比较困难了,基本上都会采取预编译的方式防止SQL注入)。SQL注入是攻击者将SQL语句改变成开发者意想不到的形式以达到破坏结构的攻击,拿到开发者本不想取到的数据。
Web应用通常都会用到数据库,当需要对数据库表内的数据进行检索或添加、删除等操作时,会使用SQL语句连接数据库进行特定的操作。如果在调用SQL语句的方式上存在疏漏,就有可能执行被恶意注入非法SQL语句。
OS命令注入攻击
OS命令注入攻击(OS Command Injection)是指通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险。
可以从Web应用中通过Shell来调用操作系统命令。倘若调用Shell时存在疏漏,就可以执行插入的非法OS命令。
被动攻击
被动攻击是指利用圈套策略执行攻击代码的攻击模式。在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。
被动攻击通常的攻击模式如下:
- 步骤1:攻击者诱使用户触发已设置好的陷阱,而陷阱会启动发送已嵌入攻击代码的HTTP请求。
- 步骤2:当用户不知不觉中招之后,用户的浏览器或邮件客户端就会触发这个陷阱。
- 步骤3:中招后的用户浏览器会把含有攻击代码的HTTP请求发送给作为攻击目标的Web应用,运行攻击代码。
- 步骤4:执行完攻击代码,存在安全漏洞的Web应用会成为攻击者的跳板,可能导致用户所持的Cookie等个人信息被窃取,登录状态中的用户权限遭恶意滥用等后果。
被动攻击模式中具有代表性的攻击是跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。
跨站脚本攻击
跨站脚本攻击(Cross-Site Scripting,XSS,因为与CSS重名了)是指通过存在安全漏洞的Web网站注册个人信息的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。动态创建的HTML部分有可能隐藏安全漏洞。就这样,攻击者编写脚本设下陷阱,用户在自己浏览器上运行时,一不小心就会收到被动攻击。简单的说就是我们访问了一个网站,在html渲染的时候解析到了攻击者在这个网站上写入的脚本指令,就会执行,由此被攻击了。本质原因是对url的参数或者用户提交输入的地方没有做充分的过滤,因此一些不合法的参数或者用户输入内容会到服务器上,用户访问前端页面就执行了攻击代码。
如何防御?
对输入(和url参数)进行过滤,对输出进行编码;cookie设置httpOnly。对所有提交的内容进行过滤,对url中的参数进行过滤,过滤掉会导致脚本执行的相关内容,对动态输出的页面内容进行html编码,让脚本没办法在浏览器中执行。
怎么过滤?黑名单策略,白名单策略,<><>转义。黑名单就是列出不能出现的对象的清单,一旦出现就进行处理。还有一种白名单的过滤,白名单就是列出可被接受的内容,比如规定所有的输入只能是“大小写的26个英文字母和10个数字,还有-和_”,所有其他的输入都是非法的,会被抛弃掉。
跨站点请求伪造
跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新。简单的说就是你登录了自己语雀,同时你又打开了攻击者设计好陷阱的一个网站或者一个链接或者图片,攻击者便得到了你的登录状态就好比登上了你的语雀,然后把你写的文档删个精光或其他敏感的操作。本质原因是服务器的验证不足,服务器收到请求后不知道是不是用户本人在操作。
如何防御?
1、加入验证码
2、验证头部信息Referer.Referer能记录当前请求的来源地址,服务器通过验证Referer就能知道是不是用户本人的客户端在操作。
HTTP首部注入攻击
HTTP首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。
向首部主体内添加内容的攻击称为HTTP响应截断攻击(HTTP Response SPlitting Attack)。
