对于常规的Web攻击手段,如XSS、CRSF、SQL注入等,防范措施比较容易,对症下药即可。
比如:XSS的防范,需要转移掉输入的尖括号;防止CRSF攻击需要将cookie设置为httponly,以及增加session相关的Hash token码;SQL注入的防范需要将分号等字符转义。
除了这些之外,还需要考虑到数据在网络传输过程中的安全性,防止数据被中途篡改或被第三方监听拦截,这需要从系统构架的体系上来进行保障。例如,采用摘要认证来防止信息篡改,采用签名认证来验证通信双方的合法性,通过HTTPS协议来保障通信过程中数据不被第三方监听和截获。
本章主要介绍一些内容:
- 常见的Web攻击手段和防御方法,eg:XSS、CRSF、SQL等等。
- 常见的一些安全算法,如数字摘要,对称加密、非对称加密、数字签名、数字认证等。
- 如何采用摘要认证方式防止信息篡改、通过数字签名来验证通信双方的合法性,以及通过HTTPS协议保证通信过程中数据不被第三方监听和截获。
- 在开放平台体系下,OAuth协议如何保障ISV对数据的访问是经过授权的合法行为。
常见的Web攻击手段
XSS攻击:
跨站脚本攻击,指攻击者在网页中嵌入恶意脚本程序,当用户打开该网页时,脚本程序便开始在客户端的浏览器上执行,以盗取客户端cookie、用户名密码,下载执行病毒木马程序,甚至获取客户端admin权限等。
XSS的原理: <input type=”text” name=”nick” value=”xiaomao” />
攻击: <input type=”text” name=”nick” value=””/><script>alert(“haha”)</script>
XSS防范:
XSS之所以会发生,是因为用户输入的数据变成了代码。因此,我们需要对用户输入的数据进行HTML转义处理,将其中的“尖括号”、“单引号”、“引号”之类的特殊字符进行转移掉。
CRSF攻击:
CRSF攻击:全称是跨站请求伪造,CSRF是通过伪装来自受信任用户的请求来利用受信任的网址。
CSRF攻击:攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求,包括利用你的身份发送邮件、发短信、进行交易转账、盗取你的账号等等。
CRSF攻击原理:
首先用户C浏览并登录了受信任站点A,登录信息验证通过以后,站点A会再返回给浏览器的信息中带上已登录的cookie,cookie信息会在浏览器端保存一定时间(根据服务器端设置而定)。完成这一步以后,用户在没有登出(清除站点A的cookie)站点A的情况下,访问恶意站点B,这时恶意站点B的某个页面向站点A发起请求,而这个请求会带上浏览器端所保存的站点A的cookie,站点A根据请求所带的cookie,判断此请求为用户C所发送的。
因此,站点A会根据用户C的权限来处理恶意站点B所发起的请求,而这个请求可能以用户C的身份发送邮件、短信、消息以及进行转账支付等操作,这样恶意站点B就达到了伪造用户C请求站点A的目的。
受害者只须做以下2件事,攻击者就能够完成CSRF攻击:
- 登录受信任站点A,并在本地生成cookie;
- 在不登出站点A的情况下,访问恶意站点B。
CSRF的防御:
(1) 将cookie设置为HttpOnly
(2) 增加token
(3) 通过Referer识别
SQL注入:
所谓SQL注入,是通过把SQL命令伪装成正常的HTTP请求参数,传递到服务器端,欺骗服务器最终执行恶意的SQL命令,达到入侵的目的。
攻击者可以利用SQL注入漏洞,查询非授权信息,修改数据库的数据,修改表结构,甚至获取服务器root权限。
SQL注入的防范:
(1) 使用预编译语句 PreparedStatement
(2) 使用ORM框架
(3) 避免密码明文存放
DDoS攻击:
DDoS(Distributed Denial of Service),即分布式拒绝服务攻击,是目前最强大,最难以防御的攻击之一。
要理解DDoS,得首先从DoS说起。最基本的DoS攻击,就是利用合理的客户端请求来占用过多的服务器资源,从而使合法用户无法得到服务器的响应。DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击方式,传统的DoS攻击一般是采用一对一的方式,当攻击目标的CPU速度、内存或网络宽带等各项性能指标不高的情况下,它的效果是明显的,但随着计算机处理能力的显著增加,DoS攻击逐渐失去了效果。
DDoS, 指的是,攻击者借助公共网络,将数量庞大的计算机设备联合起来作为攻击平台,对一个或多个目标发动攻击,从而达到瘫痪目标主机的目的。
TCP三次握手:
在进行TCP协议通信之前,必须先建立基于TCP协议的一个连接,连接建立的过程如下:
(1) 客户端发送一个包含SYN标识的TCP报文
(2) 服务器在收到客户端的SYN报文后,会返回一个SYN+ACK的报文,表示客户端请求被接收
(3) 客户端在接收到服务器端的SYN+ACK报文后,也会返回一个ACK报文给服务器端,这样,TCP连接便建立好了,接下来,便可以进行数据通信了。
常见的DDoS攻击手段:
(1) SYN Flood
(2) DNS Query Flood
(3) CC攻击
常用的安全算法
常用的安全算法,包括摘要算法、对称加密算法、非对称加密算法、信息编码等。
数字摘要:
它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash函数对消息进行计算而产生。如果消息在传递的途中改变了,接收者通过对收到的消息采用相同的Hash重新计算,新产生的摘要与原摘要进行比较,就可知道消息是否被篡改了。
因此,消息摘要能够验证消息的完整性。
常用的摘要算法有:
(1) MD5:Message DigestAlgorithm
(2) SHA,安全散列算法
(3) 十六进制编码
(4) Base64编码
对称加密算法:
在对称加密算法中,数据发送方将明文(原始数据)和加密秘钥一起经过加密算法处理后,生成复杂的加密密文进行发送,数据接收方接收到密文后,若想读取原文,则需要使用加密使用的秘钥及相同算法的逆算法对加密的密文进行解密,才能使恢复成可读明文。
在对称加密算法中,使用的密钥只有一个,发送和接收双发都使用这个密钥对数据进行加密和解密,这就要求加密和解密方事先都必须知道加密的密钥。
对称加密算法的特点是:算法公开、计算量少、加密速度快,加密效率高。
优势在于加解密的高速度和使用长密钥时的难破解性,但是,对称加密算法的安全性依赖于密钥,泄露密钥就意味着任何人都可以对加密的密文进行解密,因此,密钥的保护对加密信息是否安全至关重要。
常用的对称加密算法包括:DES算法、3DES算法、AES算法等。
非对称加密算法:
非对称加密算法,又称为公开密钥加密算法,它需要2个密钥,一个称为公开密钥(pubic key),即公钥;另一个称为私有密钥(private key),即私钥。公钥与私钥需要配对使用,如果用公钥对数据进行加密,只有用对应的私钥才能进行解密,而如果使用私钥对数据进行加密,那么只有用对应的公钥才能进行解密。
因为加密和解密使用的是2个不同的密钥,所以这种算法称为非对称加密算法。
非对称机密算法实现机密信息交换的基本过程是:
甲方生成一对密钥并将其中的一把作为公钥向其他人公开,得到该公钥的己方使用该密钥对机密信息进行加密后再发送给甲方,甲方再使用自己保存的另一把专用密钥(即私钥)对加密后的信息进行解密。
非对称加密算法的特点:对称加密算法中只有一种密钥,并且是非公开的,如果要解密,就得让对方知道密钥,所以,保证其安全性就是保证密钥的安全,而一旦密钥在传输过程中泄露,加密信息就不再安全。
而非对称加密算法中包含有两种密钥,其中一个是公开的,这样就不需要像对称加密算法那样,需要传输密钥给对方进行数据加密了,大大地提高了加密算法的安全性。
非对称加密算法能够保证,即使是在获知公钥、加密算法和加密算法源码的情况下,无法获取公钥对应的私钥,也无法对公钥加密的密文进行解密。
但是,由于非对称加密算法的复杂性,使得其加密加密速度远没有对称加解密的速度快。为了解决加解密速度问题,人们广泛使用对称与非对称加密算法结合使用的办法,优缺点互补,达到时间和安全的平衡:对称加密算法加密速度快,人们用它来加密较长的文件,然后用非对称加密算法,来给文件密钥加密,解决了对称加密算法的密钥分发问题。
当前,最常用的非对称加密算法是:RSA算法。
数字签名
签名认证是对非对称加密技术和数字摘要技术的综合运用。
指的是将通信内容的摘要信息使用发送者的私密进行加密,然后将密文与原文一起传输给信息的接收者,接收者通过发送者的公钥解密被加密的摘要信息,然后使用与发送者相同的摘要算法,对接收的内容采用相同的方式产生摘要串,与解密的摘要串进行对比,如果相同,则说明接收到的内容是完整的,否则,说明通信内容已被第三方修改。
通过前面对非对称加密算法的介绍,我们可以得知,每个人都有其特有的私钥,且都是对外界保密的,而通过私钥加密的信息只有通过其对应的公钥才能解密。
因此,私钥可以代表私钥持有者的身份,可以通过私钥对应的公钥来对私钥拥有者的身份进行校验。通过数字签名,能够确认消息是由信息发送方签名并发送出来的,因为其他人跟变假冒不了消息发送方的签名,他们没有消息发送者的私钥。而不同的内容,摘要信息千差万别,通过数字摘要算法,可以确保传输内容的完整性,如果传输内容在中途被篡改,对应的数字签名的值也将发生改变。
只有信息的发送者才能产生别人无法伪造的数字签名串,这个串能对信息发送者所发送的内容完整性和发送者的身份进行要喊和鉴别。