第3章 互联网安全架构
3.1 常见的web攻击手段
3.1.1 XSS攻击
1、xss攻击的全称是跨站脚本攻击,即攻击者在网页中嵌入恶意脚本程序,当用户打开该网页时,脚本程序便开始在客户端的浏览器上执行,以盗取客户端cookie、用户名密码,下载执行病毒木马程序,甚至是获取客户端admin权限等
2、XSS的原理
如文本框中不是输入正常的字符串,而是使入一个script脚本,使与原始的HTML串成一个可执行的脚本
3、XSS防范:需要对用户输入的数据进行HTML转义处理,将其中的”尖括号“、”单引号“、”引号“之类的特殊字符进行转义编码。
3.1.2 CRSF攻击
1、CSRF攻击的全称是跨站请求伪造,是一种对网站的恶意利用,可以理解为,攻击者盗用了你的微分,以你的名义向第三方网站发送恶意请求。
2、CRSF攻击原理
1)用户C浏览并登录网站A
2)验证通过,浏览器生成网站A的cookie
3)用户C在没有登出站点A的情况下,访问恶意网站B
4)站点B要求访问第三方站点A
5)根据B在步骤4的要求,浏览器带着步骤2处产生的cookie访问站点A
6)由于浏览器会带上用户C的cookie,站点A不知道步骤5的请求是B发出的,因此站点A会根据用户C的权限处理步骤5的请求,这样B就达到了伪造用户C请求的目的
3、CSRF的防御
1)将cookie设置为HttpOnly
2)增加token
3)通过referer识别
在http头中有一个字段叫Referer,记录了HTTP请求的来源地址。
3.1.3 SQL注入攻击
1、SQL注入:通过把SQL命令伪装成正常的HTTP请求参数,传递到服务端,欺骗服务器最终执行恶意的SQL命令,达到入侵目的。
2、SQL注入攻击原理
用户输入的文本中,加入Sql语句,使后台的Sql语句形成完整的可执行语句
3、SQL注入的防范
1)使用预编译语句----预编译时,用户输入的如果含有特殊字符会补转义
2)使用ORM框架
3)避免免密码明文存放---存储的密码进行单向Hash,如MD5加密
4)处理好相应的异常
3.1.4 文件上传漏洞
1、文件上传攻击指的是恶意攻击者利用一些站点没有对文件的类型做很好的校验,上传了可执行的文件或者脚本,并且通过脚本获得服务器上相应的权利,或者是通过诱导外部用户访问、下载上传的病毒或木马文件,达到攻击的目的。
2、防范 :对上传的文件类型进行白名单校验,限制上传文件的大小,上传文件需要进行重命名
3、文件后缀类型的判断:起始的几个字节内容是固定的,因此,可以通过这几个字节的内容判断类型,这几个字节称为魔数。
1)通过魔数来判断文件类型
2)imagemagick------是一个图片处理的开发工具包,能对图片进行缩放处理
3.1.5 DDos攻击
分布式拒绝服务攻击,DoS攻击就是利用合理的客户端请求来占用过多的服务器资源,从而使合法用户无法得到服务器的响应。DDoS攻击手段是在传统的Dos攻击基础上产生的一类攻击方式,传统攻击一般是采用一对一的方式,当攻击目标的CPU速度、内存或者网络带宽等各项性能指标不高的情况下,它的效果是明显的。
1、SYN Flood---TCP
伪造大量的IP给服务器发送SYN报文
2、DNS Query Flood---UDP
向被攻击的服务器发送少量的域名解析请求。
3、CC攻击----HTTP
攻击者控制大量“肉鸡”或者从互联网上搜寻大量匿名的HTTP代理,模拟正常用户给网站发起请求直到该网站拒绝服务为止。避开缓存,进行多次DB查询操作或者 一次请求返回大量的数据。
3.1.6 其他攻击手段
DNS域名劫持、CDN回源攻击、服务器权限提升,缓冲区溢出以及一些依赖于平台或者具体软件漏洞的攻击等。
3.2 常用的安全算法
3.2.1 数字摘要
由一个单向Hash函数对消息进行计算而产生。消息在开始时进行Hash,收到后也进行Hash,进行对比,确认正确性。
1、MD5
信息摘要算法5,长度128位,不可逆。
2、SHA
安全散列算法,长度160位,运行速度比MD5慢,但更为安全
3、十六进制编码
4、Base64编码
是一种基于64个可打印字符来表示二进制数据的方法。
5、彩虹表破解Hash算法
彩虹表法是一种破解哈希算法的技术,从原理上来说能够对任何一种Hash算法进行攻击,就是一张彩各种Hash算法生成的明文和密文的对照表。
3.2.2 对称加密算法
数据发送方将明文和加密密钥一起经过特殊加密算法处理后,生成复杂的加密密文进行发送,数据接收到收到密文后,若想读取原文,则需要使用加密使用的密钥及相同算法的逆算法对加密的密文进行解密,才能使其恢复成可读明文
1、DES算法
明文按64位进行分组,密钥长64位,但事实上只有56位参与DES运算,分组后的明文和56位的密钥按位替代或交换的方法形成密文
2、AES算法
支持128、192、256三种密钥长度
3.2.3 非对称加密算法
又称为公开密钥加密算法,它需要两个密钥,一个为公开密钥,一个为私有密钥
公钥与私钥需要配对使用,如果用公钥对数据进行加密,只有对应的私钥才能进行解密,如果使用私钥对数据进行加密,那么只有用对应的公钥才能进行解密
1、RSA算法
3.2.4 数字签名
将通信内容的摘要信息使用发送都的私钥进行加密,然后将密文与原文一起传输给信息的接收都,接收都通过发送都的公钥解密被加密的势要信息,然后使用与发送者相同的摘要算法,对接收都收到的内容彩相同的方式产生摘要串,与解密的摘要串进行对比,如果相同,则说明接收到的内容是完整的,在传输过程中没有受到第三方篡改,否则说明通信内容已被第三方修改。
1、MD5withRSA
采用MD5算法生成需要发送正文的数字摘要,并使用RSA算法来对正文进行加密和解密
2、SHA1withRSA
采用SHA1算法生成需要发送正文的数字摘要,并使用RSA算法来对正文进行加密和解密
3.2.5 数字证书
数字证书也称电子证书,类似于日常生活中的身份证,也是另外一种形式的身份认证,用于标识网络中的用户身份。
1、X.509
2、证书签发:需要数字证书认证机构CA来进行颁发。verisign和thawte、cacert等
3、证书校验
4、证书管理
1)keytool
2)openssl
5、证书的使用
3.3 摘要认证
3.3.1 为什么需要认证
外界通过对通信的监听,可轻而易举地根据请求和响应双方的格式,伪造请求与响应,修改和窃取各种信息。
3.3.2 摘要认证的原理
3.3.3 摘要认证的实现
1)客户端参数摘要的生成
请求参数--->参数排序----->将参数串接起来,加上secret生成待摘要字符串---->使用MD5等摘要算法生成摘要串----->摘要串
2)服务端参数摘要校验
请求参数----->参数排序----->将参数串接起来,加上secret生成待摘要字符串---->使用MD5等摘要算法生成摘要串----->服务端生成的摘要串与客户端通过header传递过来的摘要串进行比较----->参数是否被篡改
3)服务端响应摘要生成
在响应内容后面加上secret生成待摘要字符串---->使用MD5等摘要算法生成摘要串----->响应摘要串
4)客户端响应摘要校验
客户端接收到响应内容后,加上secret生成待摘要字符串---->使用MD5等摘要算法生成摘要串----->客户端生成的摘要串与服务端通过header传递过来的摘要串进行比较----->响应是否被篡改
3.4 签名认证
3.4.1 签名认证原理
签名认证的优势在于加密时使用的是私钥,而解密时使用的是对外公开的公钥,私钥由私钥持有都保管,不需要泄露和传输给第三方,安全性大大提高。但同时签名认证所使用的非对称加密算法将消耗更多的时间和硬件资源。
3.4.2 签名认证的实现
实现起来主要包含如下四个方面:客户端参数签名生成、服务端参数签名校验、服务端响应签名生成和客户端响应签名
1、客户端参数签名生成
参数排序----->将参数串接起来,生成待摘要字符串---->使用MD5等摘要算法生成摘要串----->使用客户端的私钥对接要串加密---->数字签名
2、服务端参数签名校验
参数排序----->将参数串接起来,生成待摘要字符串---->使用MD5等摘要算法生成摘要串---->使用客户端的公钥对对接收到的数字签名解密,得到客户端传递的摘要串----->比较解密的客户端摘要串与服务端生成的摘要串是否一致----->客户端身份及内容是否被篡改
3、服务端响应签名生成
响应内容------->响应内容作为待摘要字符串---->使用MD5等摘要算法生成摘要串----->使用服务端的私钥对摘要串加密---->数字签名
4、客户端响应签名
响应内容------->响应内容作为待摘要字符串---->使用MD5等摘要算法生成摘要串---->使用服务端的公钥对数字签名解密---->比较解密后的摘要串与客户端生成的摘要串是否一致------->服务端身份及内容是否被篡改
3.5 HTTPS协议
3.5.1 HTTPS协议原理
基于SSL的HTTP协议,简单地说就是HTTP的安全版,通信的内容使用对称加密方式进行加密,通信两端约定好通信密码后,,通过公钥对密码进行加密传输,只有该公钥对应的私钥,也就是通信的另一端能够解密获得通信密码。
协议栈------HTTP(应用层)--->SSLorTLS(安全层)--->TCP(传输层)--->IP(网络层)--->网络接口层
3.5.2 SSL\TLS
3.5.3 部署HTTPS Web
3.6 OAuth的介绍
3.6.1 OAuth的介绍
1、平台商、第三方软件厂商、用户之前的访问授权,提供一个安全、开放的标准
3.6.2 OAuth授权过程
第三方开发者向平台商申请应用ID,即appID,对自己的APP进行注册,Oauth授权涵盖了三个角色
1)用户--->ISV发起请求
2)ISV--->平台商请求Request Token,并带上申请的Appid
3)平台------>返回第三方应用RequestToken
4)ISV应用将用户引导到平台的授权页面,并带上自己的Appid,RequestToken和回调地址
5)用户在平台的页面上进行登录,并且完成授权---->这样便不会暴露用户和密码给第三方
6)平台通过ISV提供的回调链接,返回给ISV应用accessToken
7)ISV应用通过AccessToken取得用户授权的数据,进行加工后返回给用户,授权数据访问完成。