读《图解HTTP》,现在将关于安全的部分整理一下,分享出来。内容如下:
确保 Web 安全的HTTPS
HTTP 的缺点
通信使用明文(不加密),内容可能会被窃听
不验证通信方的身份,因此有可能遭遇伪装
无法证明报文的完整性,所以有可能已遭篡改
使用明文可能会被窃听,加密处理防止被窃听
一种手段是将通信加密。
HTTP协议中没有加密机制,但可以通过和SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全传输层协议)的组合使用,加密HTTP的通信内容。
用SSL建立安全通信线路之后,就可以在这条线路上进行HTTP通信了。
与SSL组合使用的HTTP被称为HTTPS(HTTP Secure,超文本传输安全协议)或HTTP overSSL。
另一种手段是对参与通信的内容本身加密的方式。
不验证通信方的身份就可能遭遇伪装
虽然使用HTTP协议无法确定通信方,但如果使用SSL则可以。
SSL不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定方。
证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。
另外,伪造证书从技术角度来说是异常困难的一件事。所以只要能够确认通信方(服务器或客户端)持有的证书,即可判断通信方的真实意图。
通过使用证书,以证明通信方就是意料中的服务器。这对使用者个人来讲,也减少了个人信息泄露的危险性。
另外,客户端持有证书即可完成个人身份的确认,也可用于对Web网站的认证环节。
无法证明报文完整性,可能已遭篡改
换句话说,没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
HTTPS是身披SSL外壳的HTTP
HTTPS并非是应用层的一种新协议。
只是HTTP通信接口部分用SSL(SecureSocket Layer)和TLS(Transport Layer Security)协议代替而已。
通常,HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信了。
简言之,所谓HTTPS,其实就是身披SSL协议这层外壳的HTTP。
原来HTTP=>TCP=>IP
,现在HTTP=>SSL=>TCP=>IP
相互交换密钥的公开密钥加密技术
公开密钥加密使用一对非对称的密钥。一把叫做私有密钥(private key),另一把叫做公开密钥(public key)。顾名思义,私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。
使用公开密钥加密方式,发送密文的一方使用对方的公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听而盗走。
另外,要想根据密文和公开密钥,恢复到信息原文是异常困难的,因为解密过程就是在对离散对数进行求值,这并非轻而易举就能办到。退一步讲,如果能对一个非常大的整数做到快速地因式分解,那么密码破解还是存在希望的。但就目前的技术来看是不太现实的。
因为公开密钥加密与共享密钥加密相比,其处理速度要慢。所以HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制。即在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。
证明公开密钥正确性的证书
遗憾的是,公开密钥加密方式还是存在一些问题的。那就是无法证明公开密钥本身就是货真价实的公开密钥
为了解决上述问题,可以使用由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书。
HTTPS的安全通信机制
HTTPS的通信步骤
步骤1: 客户端通过发送Client Hello报文开始SSL通信。报文中包含客户端支持的SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
步骤2: 服务器可进行SSL通信时,会以Server Hello报文作为应答。和客户端一样,在报文中包含SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。
步骤3: 之后服务器发送Certificate报文。报文中包含公开密钥证书。
步骤4: 最后服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束。
步骤5: SSL第一次握手结束之后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中的公开密钥进行加密。
步骤6: 接着客户端继续发送Change Cipher Spec报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密。
步骤7: 客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
步骤8: 服务器同样发送Change Cipher Spec报文。
步骤9: 服务器同样发送Finished报文。
步骤10: 服务器和客户端的Finished报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到SSL的保护。从此处开始进行应用层协议的通信,即发送HTTP请求。
步骤11: 应用层协议通信,即发送HTTP响应。
步骤12: 最后由客户端断开连接。断开连接时,发送close_notify报文。上图做了一些省略,这步之后再发送TCP FIN报文来关闭与TCP的通信。
确认访问用户身份的认证
核对的信息通常是指以下这些。
密码:只有本人才会知道的字符串信息。
动态令牌:仅限本人持有的设备内显示的一次性密码。
数字证书:仅限本人(终端)持有的信息。
生物认证:指纹和虹膜等本人的生理信息。
IC卡等:仅限本人持有的信息。
服务端认证方式,比较常用的是基于表单验证
基于表单认证本身是通过服务器端的Web应用,将客户端发送过来的用户ID和密码与之前登录过的信息做匹配来进行认证的。
就是Session管理及Cookie应用
Web 的攻击技术
针对Web应用的攻击模式
- 主动攻击: SQL注入攻击和OS命令注入攻击等
- 被动攻击: 跨站脚本攻击和跨站点请求伪造等
因输出值转义不完全引发的安全漏洞
跨站脚本攻击
跨站脚本攻击(Cross-Site Scripting,XSS)是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。
动态创建的HTML部分有可能隐藏着安全漏洞。(如script标签等)
就这样,攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一不小心就会受到被动攻击。
危害:
- 利用虚假输入表单骗取用户个人信息。
- 利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。
- 显示伪造的文章或图片。
SQL注入攻击
SQL注入(SQL Injection)是指针对Web应用使用的数据库,通过运行非法的SQL而产生的攻击。
该安全隐患有可能引发极大的威胁,有时会直接导致个人信息及机密信息的泄露。(单双引号)
危害:
- 非法查看或篡改数据库内的数据
- 规避认证
- 执行和数据库服务器业务关联的程序等
OS命令注入攻击
OS命令注入攻击(OS Command Injection)是指通过Web应用,执行非法的操作系统命令达到攻击的目的。
只要在能调用Shell函数的地方就有存在被攻击的风险。
HTTP首部注入攻击
HTTP首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。属于被动攻击模式。
向首部主体内添加内容的攻击称为HTTP响应截断攻击(HTTP Response SplittingAttack)
危害:
- 设置任何Cookie信息
- 重定向至任意URL
- 显示任意的主体(HTTP响应截断攻击)
因设置或设计上的缺陷引发的安全漏洞
强制浏览
强制浏览(Forced Browsing)安全漏洞是指,从安置在Web服务器的公开目录下的文件中,浏览那些原本非自愿公开的文件。
危害:
- 泄露顾客的个人信息等重要情报
- 泄露原本需要具有访问权限的用户才可查阅的信息内容
- 泄露未外连到外界的文件
不正确的错误消息处理
不正确的错误消息处理(Error Handling Vulnerability)的安全漏洞是指,Web应用的错误信息内包含对攻击者有用的信息。
开放重定向
开放重定向(Open Redirect)是一种对指定的任意URL作重定向跳转的功能。
而与此功能相关联的安全漏洞是指,假如指定的重定向URL到某个具有恶意的Web网站,那么用户就会被诱导至那个Web网站。
因会话管理疏忽引发的安全漏洞
会话劫持会话劫持(Session Hijack)是指攻击者通过某种手段拿到了用户的会话ID,并非法使用此会话ID伪装成用户,达到攻击的目的。
途径:
- 通过非正规的生成方法推测会话ID
- 通过窃听或XSS攻击盗取会话ID
- 通过会话固定攻击(Session Fixation)强行获取会话ID
会话固定攻击
对以窃取目标会话ID为主动攻击手段的会话劫持而言,会话固定攻击(SessionFixation)会强制用户使用攻击者指定的会话ID,属于被动攻击。
跨站点请求伪造
跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。
危害:
- 利用已通过认证的用户权限更新设定信息等
- 利用已通过认证的用户权限购买商品
- 利用已通过认证的用户权限在留言板上发表言论
密码破解
点击劫持
DoS攻击
DoS攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击。
有时也叫做服务停止攻击或拒绝服务攻击。
DoS攻击的对象不仅限于Web网站,还包括网络设备及服务器等。(大量合法请求)
后门程序
后门程序(Backdoor)是指开发设置的隐藏入口,可不按正常步骤使用受限功能。
利用后门程序就能够使用原本受限制的功能。
类别:
- 开发阶段作为Debug调用的后门程序
- 开发者为了自身利益植入的后门程序
- 攻击者通过某种方法设置的后门程序
- 本文作者: Jambo
- 版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!