互联网安全架构
一、常见web攻击手段及防御方法
-
XSS(cross site scripting)跨站脚本攻击。
转义掉输入的尖括号
-
CRSF(cross site request forgery)跨站请求伪造。
需要将cookie设置为httponly
增加session相关的Hash token码,服务端生成的token码并不存在cookie中。
也可以通过Referer识别,HTTP头中有个字段叫Referer,它记录了该HTTP请求的来源地址。
-
SQL注入
将特殊字符转义。
-
DDos(Distributed Denial of Service)分布式拒绝服务攻击。
分类:
- 依赖蛮力的ICMP Flood、UDP Flood等,随着硬件性能提升已不常见。
- 依赖协议特征和具体的软件漏洞进行攻击,如Slowloris攻击、Hash碰撞攻击等。
- 还有就是采用两种的混合方式,既利用了协议、系统的缺陷,又具备了海量的流量,如SYN Flood、DNS Query Flood等。
- SYN Flood利用了TCP三次握手和TCP为实现可靠传输而设置的异常处理机制,当第三步服务端没有收到ACK时,通常会进行3-5次,每隔30s左右就会轮询一遍等待队列,重试所有客户端,而且服务端发出SYN-ACK报文后,通常会预分配一些资源给将建立的TCP连接。
- DNS Query Flood实际上是UDP Flood攻击的变形,由于DNS服务器在互联网中具备不可替代的作用,一旦DNS服务器瘫痪,影响甚大。这种攻击一般是向被攻击的服务器发送海量的域名解析请求。而这些域名通常是随机生成的,大部分都是不存在的。
- CC(Challenge Collapsar)攻击属于DDos的一种,是基于应用层HTTP协议发起的DDos攻击,也称为HTTP Flood。通过控制大量“肉鸡”或利用互联网上的大量匿名的HTTP代理,模拟正常用户给网站发起请求直到该网站拒绝服务。
-
其他一些攻击手段还有DNS域名劫持、CDN回源攻击、服务器权限提升,缓冲区溢出,以及一些依赖于平台或者具体软件漏洞的攻击等。
二、常用的安全算法
摘要算法、对称加密算法、非对称加密算法、信息编码等。
-
数字摘要
也叫消息摘要,它是一个唯一对应一个消息或文本的固定长度的值,由一个单向Hash函数对消息进行计算而产生。
- MD5(Message Digest Algorithm 5)即信息摘要算法5。长度128。
- SHA(Secure Hash Algorithm)即安全散列算法。长度160,比MD5速度慢但更安全。
- 十六进制编码。
- Base64编码。
- 彩虹表破解Hash算法。彩虹表就是一种采用各种Hash算法生成的明文和密文的对照表。
-
对称加密算法
- DES算法。3DES算法是DES算法向AES算法的过渡算法。
- AES算法。设计有三个密钥长度128,192,256位。
-
非对称加密算法
有公钥和私钥,如果用公钥对数据加密,只有私钥能解密,反之亦然。
- RSA算法。基于两个大素数相乘十分容易,但反过来想要对其乘积进行因式分解极其困难。
-
数字签名
对称加密和非对称加密的结合使用,指将通信内容的摘要信息使用发送者的私钥进行加密,然后将密文和原文一起传输给接收者;接收者先使用公钥对密文解密得到原文的摘要,然后通过和发送者相同的摘要算法产生原文的摘要,对比两者就知道原文是否被篡改。
- MD5withRSA
- SHAwithRSAcf
-
数字证书
-
证书签发(实际上是对数字证书内容的数字签名)
-
证书校验(通过权威认证机构的根证书获得证书颁发者的公钥,通过该公钥对证书的数字签名进行校验,还对比如有效时间这些信息进行检查)。
根证书是证书认证机构给自己颁发的数字证书,是证书信任链的起始点,安装根证书意味着对这个证书认证机构的信任。
-
三、摘要认证
对于普通的非敏感数据,我们需要关注其真实性和准确新,因此保证数据不被篡改是首先需要考虑的问题。
鉴于HTTPS性能上的成本和额外申请CA证书,一般采用对参数和响应进行摘要的方法,就能满足需求。
请求参数摘要的生成过程:
请求参数->参数排序->将参数串接起来,加上secret,生成待摘要字符串->使用摘要算法生成摘要串。
服务端参数摘要验证:
请求参数->参数排序->将参数串接起来,加上secret,生成待摘要字符串->使用摘要算法生成摘要串->服务端生成的摘要串和客户端通过header传递过来的摘要串进行比较。
响应摘要的生成和验证与请求参数摘要的生成和验证一样。
四、签名认证
摘要认证能一定程度上防止通信内容被篡改,但是,算法的安全性取决于secret的安全,一旦secrett泄露,恶意攻击者便可以根据相应的摘要算法,伪造出合法的请求或响应。
客户端请求数字签名生成过程:
请求参数->参数排序->将参数串接起来->使用摘要算法生成摘要串->使用客户端私钥对摘要串加密。
服务端对客户端数字签名校验:
请求参数->参数排序->将参数串接起来->使用摘要算法生成摘要串->使用客户端的公钥对接收到的数字签名基金解密得到摘要串->比较这两个摘要串。
响应摘要的生成和验证与请求参数摘要的生成和验证一样。
签名认证能解决身份校验问题以及检测通信是否被篡改,但HTTP是明文传输,签名认证对第三者监听还原通信内容是无能为力的。
五、HTTPS协议
摘要认证和签名认证能检测到通信内容被篡改,但是不能解决通信内容被监听的问题。对一些账户密码等敏感信息,一旦被监听后果很严重,这时候就需要更加严密的手段保障信息安全。
- Hypertext Transfer Protocal over Secure Socket Layer即基于SSL的HTTP协议。
- 依托SSL协议,HTTPS能够确保整个通信过程都是经过加密的,密钥随机产生,并且能够通过数字证书验证通信双方的身份,以此来保证信息安全。
- 通信的内容使用对称加密方式进行加密,该密码使用非对称加密进行加密。这样既保证了安全,也使加密性能和时间成本可控。
- TLS是SSL的继任者,是基于SSL协议的通用化协议。
六、OAuth认证
摘要认证、签名认证和HTTPS协议能给确保客户端和服务端在双方相互信任的情况下通信的安全,但是对于一些特殊场景就无能为力了。
拥有海量用户和数据的巨头以一己之力无法充分满足用户的多样需求,这时就需要将数据以接口的形式开放给第三方开发者。满足一小部分用户的独特需求,又能使自己获得利益,还能让数据流动起来,在大平台周围形成一个良性是生态环境,最终达到用户、平台和第三方开发者共赢。
OAuth协议旨在为用户资源的授权访问提供一个安全、开发的标准。
网友评论