文章目录
/图解HTTP 笔记 一、二
确认访问用户身份的认证
密码:只有本人才会知道的字符串信息
动态令牌:仅限本人持有的设备内显示的一次性密码
数字证书:仅限本人持有的信息
生物认证:指纹和虹膜等本人的生理信息
IC
卡等:仅限本人持有的信息
HTTP的认证方式
BASIC
认证(基本认证)
DIGEST
认证(摘要认证)
SSL
客户端认证
FormBase
认证(基于表单的认证)
Keberous
认证
NTLM
认证
BASIC认证
是web
服务器与通信客户端之间的认证方式。
认证步骤:
- 第二步中当用户代理为浏览器时,只需要输入
ID
和密码,浏览器会自动完成到Base64
编码的转换。 - 虽然采用
Base64
加密,但这并不是加密处理,因此被人窃听的可能性较高。 - 要想再进行一次
BASIC
认证,一般浏览器无法注销,不够快捷灵活,达不到web网站期望的安全性等级,不常用
DIGEST认证
-
同样使用质询/响应【一开始一方发送认证,且这一方接收到来自另一方的质询码生成响应码】的方式,但不是像
BASIC
认证中直接发送明文密码。因此,这种方式使得密码泄露的可能性降低。 -
DIGEST认证步骤:
-
nonce
是一种每次随返回的401
响应生成的任意随机字符串。该字符串推荐由Base64编码的十六进制数的组成形式,实际内容依赖服务器的具体实现。 -
DIGEST
认证的安全等级较BASIC
高,但是依旧比HTTPS
的客户端认证较弱,且同样不那么便捷灵活,安全等级较低。DIGEST
认证提供防止密码被窃听的保护机制,但并不存在防止用户伪装的保护机制。
SSL客户端认证
SSL
客户端认证是借由HTTPS
的客户端证书完成认证的方式,凭借SSL
客户端证书认证服务器可确认访问是否来自已登录的客户端,而且可以认证是否为否为本人,防止第三者冒充。
SSL客户端认证的认证步骤
- 需要事先将客户端证书分发给客户端,且客户端必须安装此证书
- 接收到认证资源的请求,服务器发送Certificate Request报文,要求客户端提供客户端证书。
- 用户选择客户端证书后,客户端会把客户端证书发送给服务器。
- 服务器验证客户端证书后即可领取证书内客户端的公开密钥,然后开始
HTTPS
加密通信。
SSL客户端认证采用双因素验证
SSL
不仅依靠证书完成认证,还会与基于表单验证组合形成一种双因素验证来使用。- 认证过程不仅需要密码,还需要申请认证者提供其他持有信息来确定是用户本人的行为。
基于表单验证
认证多半为基于表单验证
HTTP
协议标准提供的BASIC
和DIGEST
认证几乎不怎么使用,SSL
客户端认证虽然安全等级较高,但因为导入以及维持费用等问题,普及度较低。
Session管理及Cookie应用
cookie
指某些网站为了辨别用户身份,进行session
跟踪而存储在用户本地终端上的数据,而这些数据通常会进行加密处理
- 一般使用
cookie
来管理Session
- 基于表单验证本身是通过服务器端的web应用,将客户端发送过来的用户
ID
和密码与之前登录过的信息做匹配来进行认证。 -
- 客户端以
POST
方法把用户名和密码发送给服务器,使用HTTPS
通信来进行HTML表单画面的显示和用户输入数据的发送。 - 服务器发送用于识别用户的
Session ID
,通过验证从客户端发过来的登录信息进行身份认证,然后把用户的认证状态与Session ID
绑定后记录在服务器端。因此,若Session ID
被盗,则对方就可以伪装成你的身份进行操作。所以,Session ID
使用难以揣测的字符串,且服务器端进行有效期的管理来保证其安全性。为减少被xss
攻击造成损失,正如前一篇文章提到的,cookie
内加上httponly
属性。 - 客户端收到
Session ID
后,将其作为cookie
保存在本地。下次向服务器发送请求时,浏览器会自动发送cookie
,Session ID
随之发送到服务器上完成身份验证。
- 客户端以
- 还有的安全的保存方法:先给密码加盐
salt
【由服务器随机生成的一个字符串,保证长度足够长】,再使用散列函数计算出散列值保存。
基于HTTP的功能追加协议
HTTP
的2.0
版本就是在SPDY
和websocket
的基础之上改善。
消除HTTP瓶颈的SPDY
HTTP的瓶颈
请求只能从客户端开始,客户端不能接收除响应以外的指令。
请求/响应首部未经压缩发送,导致信息较多有延迟。
每次发送相同的冗长的首部,浪费较多。
可任意选择数据压缩格式,非强制压缩发送。
Ajax
通过JS
的调用,从已加载完毕的web
页面上发起请求,只更新局部页面,解决了第一个响应的问题。comet
延迟应答,保留响应直至服务器端的更新,但是更消耗资源,响应时间也变长了。Ajax
和Comet
技术均提升了web
的浏览速度
SPDY的设计与功能
- 为了安全性,
SPDY
规定通信过程中使用SSL
。 SPDY
以会话层加入,控制数据的流动,但依然采用HTTP
建立通信连接,依然可以使用GET、POST、cookie
等。SPDY
增加的额外功能:- 多路复用流:通过单一的
TCP
连接,可以无限处理多个HTTP
请求,TCP
处理效率提高。 - 赋予请求优先级:在发送多个请求时,解决因带宽低而导致响应变慢的问题。
- 压缩
HTTP
首部:通信产生的数据包流量和发送的字节数减少。 - 推送功能:服务器主动直接发送数据,不必等待客户端的请求。
- 服务器提示功能:主动提示客户端请求所需的资源,避免发送不必要的请求。
- 多路复用流:通过单一的
SPDY
并不是绝对可以消除瓶颈,也不是只有这一种技术可以解决HTTP
瓶颈。
使用浏览器进行全双工通信的websocket
websocket的设计与功能
建立在HTTP
基础上的协议,即web
浏览器与服务器之间全双工通信标准。
websocket协议
- 一旦服务器与客户端之间建立起
websocket
协议的通信连接,之后所有的通信都依靠这个专用协议。 - 通信过程可互相发送
JSON、XML、HTML
或图片等任意格式的数据。 - 无论连接的发起方是谁,都可以向对方发送报文。
- 协议特点
- 推送功能:服务器主动直接发送数据,不必等待客户端的请求。
- 减少通信量:
websocket
的首部信息很小,通信量也减少了 - 为了实现
wesocket
通信,在HTTP
连接建立之后,需要完成一次握手步骤。
一、握手、请求
实现websocket
通信,需要用到HTTP
的Upgrade
首部字段【用于检测HTTP
协议及其他协议是否可使用更高的版本进行通信】,告知服务器通信协议发生改变,来到到握手目的。Sec-websocket-key
字段内记录握手中的键值,Sec-websocket-Protocol
字段内记录使用的子协议。
二、握手、响应
成功握手确立websocket
连接之后,通信是不再使用HTTP
的数据帧,而是采用websocket
独立的数据帧·。
web服务器管理文件的webDAV
分布式文件系统,可对服务器上的内容直接文件复制、粘贴、创建、删除、文件创建者管理、文件编辑过程中禁止其他用户内容覆盖、对文件内容修改版本控制等功能。
webdav新增概念(扩展HTTP/1.1)
- 集合:统一管理多个资源的概念,以集合为单位进行各种操作。
- 资源:文件或集合称为资源。
- 属性:定义资源的属性,格式为“名称+值”。
- 锁:把文件设置为无法编辑状态,多人同时编辑防止在同一时间内进行内容写入。
webdav新增方法和状态码
propfind
:获取属性
proppatch
:修改属性
mkcol
:创建集合
copy
:复制资源及属性
move
:移动资源
lock
:资源加锁
unlock
:资源解锁
102 processing
:可正常处理请求,但目前是处理中请求
207 multi-status
:存在多种状态
422 unprocessible entity
:格式正确,内容有误
423 locked
:资源被加锁
424 failed dependency
:处理与某请求关联的请求失败,因此不再维持依赖关系
507 insufficient storage
:保存空间不足
构建web内容的技术
HTML基础学习
动态HTML需要使用JS语言
CSS基础学习
web应用
通过web提供功能的web应用
web
应用于动态内容之上。
与web服务器及程序协作的CGI
CGI
指web
服务器在接收到客户端发送过来的请求后转发给程序的一组机制。- 使用
CGI
编写的程序叫CGI
程序,通常用PHP、C
等编程语言编写。
因Java而普及的Servlet
Servlet
是一种能在服务器上创建动态内容的程序,用Java
语言实现的一个接口。- 在上面的
CGI
中,每次收到请求,程序都要启动一次,负载量较大;而Servlet
运行在与web
服务器相同的进程中。
数据发布的格式及语言
可扩展标记语言XML
XML
是一种可按应用目标进行扩展的通用标记语言,旨在使互联网数据共享更加容易。- 从
XML
文档中读取数据比HTML
更简单,更容易对数据进行读取。 - 也可用在两个不同的应用之间的交换数据格式化。
发布更新信息的RSS/Atom
RSS
和Atom
都是发布新闻或博客日志等更新信息文档的格式的总称,两者都用到了XML。
JS衍生的轻量级易用JSON
JSON
使一种以JS
的对象表示法为基础的轻量级数据标记语言,能够处理的数据类型有false、null、true
、对象、数组、数字、字符串这七种类型。JSON
的字符串形式可以被JS
轻松读入。
web的攻击技术
针对web的攻击技术
简单的HTTP
协议本身不会成为攻击对象,而应用HTTP
协议的服务端和客户端以及运行在服务器上的web
应用等资源才是攻击目标。
HTTP不具备必要的安全功能
- 现在的大多数
web
网站所应用的session
、加密处理等安全性方面的,HTTP
协议均无这些功能。 - 例如远程登录使用的
SSH
协议,SSH
具备协议级别的认证以及会话管理,而HTTP
协议没有。在架设SSH
服务方面,任何人都可轻易创建安全等级高的服务,而HTTP
已架设好服务器,很多服务需要重新开发。
在客户端即可纂改请求
- 即
web
应用可能会接收到与预期不相同的内容。
针对web应用的攻击模式
- 以服务器为目标的主动攻击
- 主动攻击通过直接访问
web
应用,把攻击代码传入的攻击模式。由于该模式是直接针对服务器上的资源进行攻击,因此攻击者需要能够访问到资源。 - 具有代表性的主动攻击:
SQL
注入攻击和OS
命令注入攻击。
- 以服务器为目标的被动攻击
- 被动攻击模式中具有代表性的是
XSS
攻击和CSRF
。 - 利用用户身份攻击企业内部网络。
因输出值转义不完全引发的安全漏洞
实施web应用的安全对策:
一、 客户端的验证
二、 服务器端(web应用端)的验证
- 输入值验证
- 输出值转义
- 多数情况下使用
JS
在客户端验证数据,可是客户端允许纂改数据或者关闭JS
,因此不适合作为安全防范。保留客户端验证只是为了尽早辨识输入错误,提高UI
体验。 - 输入值验证通常是指检查是否符合系统内部逻辑的数值或者检查字符编码等预防对策。
- 输出值转义主要是处理从数据库或文件系统、
HTML
、右键等输出web
应用处理的数据。 - 输出值转义不完全可能会触发攻击者传入的攻击代码。
XSS攻击
指通过存在安全漏洞的web网站注册用户的浏览器内允许非法的
HTML
标签或JS
进行的一种攻击,是攻击者利用预先设置的陷阱触发的被动攻击。
xss的影响:
- 利用虚拟输入表单骗取个人信息。
- 利用脚本窃取用户的
cookie
值,被害者在不知情的情况下,帮助攻击者发送恶意请求。 - 显示伪造的文章或图片。
攻击案例:
一、 <s>
被解析成HTML
标签
若将标签改为<script>
则可能会被XSS
攻击。
二、
这个恶意的URL
被隐藏植入
当用户在表单输入ID
和密码之后,表面没有变化,但脚本在后台运行,将ID
和密码直接发送到攻击者的网站(hacker.jp
),导致个人信息被窃取。
三、对用户cookie的窃取攻击
该脚本指定的http://hacker.jp/xss.js
这段JS
代码被执行后,即可访问到该web
应用所处域名下的cookie
信息,发送到攻击者的web
网站http://hacker.jp/
SQL注入攻击
SQL
攻击指针对web
应用使用的数据库,通过运行非法的SQL
语句而产生的攻击,危害较大。
SQL是用来操作关系型数据库管理系统的数据库语言,如MySQL、Server、Oracle
等
SQL注入攻击的影响
- 非法查看或纂改数据库内的数据
- 规避认证
- 执行和数据库服务器业务关联的程序等
OS命令注入攻击
是指通过
web
应用执行非法的操作系统命令达到攻击的目的,只要能调用shell
函数的地方就存在被攻击的风险。
- 在
web
应用中通过调用shell
函数来调用对操作系统的命令。若调用时存在疏漏,则可以执行非法的OS
命令注入攻击。
OS注入攻击案例
核心代码:open
函数会调用sendmail
命令发送邮件,而指定的邮件发送地址为$adr
。
攻击者将上面的值指定作为邮件地址。
攻击者的输入值中的分号,在os
命令中,会被解析为分割多个执行命令的标记。最终,含有linux
账户信息/etc/passwd
的文件,以邮件形式发送给了hack@example.jp
HTTP首部注入攻击
指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击,属于被动攻击模式。
HTTP注入攻击危害
- 设置任何
cookie
信息 - 重定向至任意
URL
- 显示任意的主体(
HTTP
响应截断攻击)
HTTP注入攻击案例
Location:重定向跳转至任意URL
将location中的内容换成上面的值,%0D
和%0A
代表HTTP报文中的换行符,强制将攻击者网站的会话ID
设置为SID=123456789的set-cookie
首部字段。
因此攻击者可指定修改任意位置的cookie
信息。
HTTP响应截断攻击
是用在HTTP
首部注入的一种攻击,将两个%0D%0A
并排插入字符串后发送,利用两个连续的换行可作出HTTP
首部与主体风格所需的空行,这样就能显示伪造的主体。
利用这种攻击,可达到与XSS
攻击相同的效果。
邮件首部注入攻击
指
web
应用中的邮件发送功能,攻击者通过向邮件首部To
或Subject
内任意添加非法内容发起的攻击。利用存在安全漏洞的web
网站,可对任意邮件地址发送广告邮件或病毒邮件。
攻击案例
使用换行符之后,实现对Bcc
邮件地址的追加发送。
连续两次换行符,可能纂改邮件文本内容并发送。
目录遍历攻击
是指对本无意公开的文件目录,通过非法截断其目录路径之后,达到一种访问目的的攻击,这种攻击又叫路径遍历攻击。
攻击案例(读取文件功能)
远程文件包含漏洞
指当前部分脚本内容需要从其他文件读入时,攻击者利用指定外部服务器的
URL
充当依赖文件,让脚本读取之后,就可运行任意脚本的一种攻击。
攻击案例
以上攻击案例执行了可显示web
服务器上文件以及目录信息的ls命令。
因设置或设计上的缺陷引发的安全漏洞
强制浏览
是指安置在
web
服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。
强制浏览的影响
- 泄露顾客的个人信息等重要情报
- 泄露原本需要具有访问权限的用户才可查阅的信息内容
- 泄露未连接到外界的文件
文件目录一览:
http://www.example.com/log/
,通过指定文件目录名称,即可在文件一览中看到显示的文件名。
容易被推测的文件名及目录名:http://www.example.com/entry/entry_081202.log
,文件名称较容易推测,能推出下一个文件是entry_081202.log。
备份文件:http://www.example.com/cgi-bin/entry.cgi
(原始文件)
http://www.example.com/cgi-bin/entry.cgi~
(备份文件)
http://www.example.com/cgi-bin/entry.bak
(备份文件)
由编辑软件自动生成的备份文件无执行权限,有可能直接以源代码形式显示。
经认证才可显示的文件:直接通过URL
访问原本必须经过认证才能在web
页面上使用的文件(HTML
文件、图片、CSS
以及其他数据等)。
强制浏览的案例
只要知道图片的URL
,通过直接指定URL
的方式就能显示该图片。日记的功能和文本具有访问对象的控制,但不具备对图片访问对象的控制,从而产生了安全漏洞。
不正确的错误消息处理
是指
web
应用的错误信息内包含对攻击者有用的信息,如web
应用抛出的错误消息、数据库等系统抛出的错误消息。
攻击案例
web应用抛出的错误信息
数据库等系统抛出的错误信息
错误主要集中在以下几个方面:
PHP
或ASP
等脚本错误- 数据库或中间件的错误
- web服务器的错误
开放重定向
是以一种对指定
URL
作重定向跳转的功能。与此相关联的安全漏洞是指,假如指定的重定向URL
到某个具有恶意的web
网站,那么用户就会被诱导至那个web
网站。
也可被当作钓鱼攻击的跳板。
因会话管理疏忽引发的安全漏洞
会话管理是用来管理用户状态的必备功能,如果有所疏忽,会导致用户的认证状态被窃取等后果
会话劫持
指攻击者利用某些手段拿到了用户的会话
ID
,并非法使用会话ID
伪装成用户,达到攻击的目的。会话ID
中会记录客户端的cookie
等信息。
获取会话ID
的途径:
- 通过非正规的生成方法推测会话
ID
。 - 通过窃听或
XSS
攻击盗取会话ID
。 - 通过会固定攻击(
Session Fixation
)强行获取会话ID
。
攻击案例
会话固定攻击
对已窃取目标会话
ID
为主动攻击手段的会话劫持而言,会话固定攻击会强制用户使用攻击者指定的会话ID
,属于被动攻击。
攻击案例
Session Adoption
是指
PHP
或ASP.NET
能够接收处理未知会话ID
的功能。
恶意使用该功能便可跳过会话固定攻击的准备阶段,从web
网站获得发行的会话ID
的步骤。即,攻击者可私自创建会话ID
构成陷阱,中间件却会误以为该会话ID
是未知会话ID
而接受。
CSRF(跨站点请求伪造)
是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
CSRF的影响
- 利用已通过认证的用户全新更新设定信息等
- 利用已通过认证的用户权限购买商品
- 利用已通过认证的用户权限在留言板发表言论
CSRF攻击案例
其他安全漏洞
密码破解
即算出密码,突破认证。攻击不仅限于
web
应用,还包括其他的系统(如FTP
或SSH
等)。
除去突破认证的攻击手段,还有SQL
注入攻击逃避认证、XSS
攻击窃取密码信息等方法。
手段
- 通过网络的密码试错
- 对已加密密码的破解(指攻击者入侵系统,已获得加密或三列处理的密码数据的情况)
通过网络进行密码试错
- 穷举法
- 又叫暴力破解法,即用所有可行的候选密码对目标的密码系统试错,用以突破验证的一种攻击。
- 字典攻击
- 是指利用事先收集好的候选密码(经过各种组合方式后存入字典),枚举字典中的密码,尝试通过认证的一种攻击手段。
对已加密密码的破解
web
应用在保存密码时,一般通过散列函数作散列处理或加salt
【由服务器随机生成的一个字符串,保证长度足够长】的手段对要保存的密码加密,要想真正使用密码,则需要解码。
- 通过穷举法、字段攻击进行类推
- 彩虹表
由明文密码及与之对应的散列值构成的一张数据库表,是一种通过事先制作庞大的彩虹表,比上一种方法时间较短,从彩虹表搜索散列值来推导明文密码。
彩虹表
3. 拿到密钥
使用共享密钥加密方式的情况下,如果能通过某种手段拿到加密使用的密钥,即可对密码数据解密。
4. 加密算法的漏洞
点击劫持
是指利用透明的按钮或链接做成陷阱,覆盖在
web
页面之上,诱导用户点击链接并访问内容的一种攻击手段,又叫界面伪装。
攻击案例
透明的按钮覆盖住了PLAY
按钮与注销按钮。
DoS攻击
是一种让运行中的服务呈停止状态的攻击,也叫服务停止攻击或拒绝服务攻击。
DoS
不仅限于web
网站,还包括网络设备及服务器。
攻击方式
- 集中利用访问请求造成资源加载、资源用尽的同时,实际上服务也就呈停止状态。
- 通过攻击安全漏洞使服务停止
- 多台计算机发起的
DoS
攻击叫DDoS
攻击,通常利用那些感染病毒的计算机作为攻击者的攻击跳板。
后台程序
是指开发设置的隐藏入口,可不按正常步骤使用受限功能,利用后台程序可使用原本受限制的功能。可通过见识进程和通信的状态来发现被植入的后门程序,一般很难发现。
通常的后台程序类型
- 开发阶段作为
Debug
调用的后门程序 - 开发者为了自身利益植入的后门程序
- 攻击者通过某种方法设置的后门程序