第一章 常见网络攻击
1.1、XSS攻击
1.1.1 XSS简介
XSS攻击的全称是跨站脚本攻击(Cross Site Scripting),为不跟层叠样式表
(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS
跨站脚本攻击也就是在网站里嵌入恶意脚本程序,当用户打开网站时,窃取Cookie,盗取信息
1.1.2 XSS攻击方式
1、URI参数传递
2、表单提交参数
1.1.3 解决方案
1、继承HttpServletRequestWrapper,然后重写(@Override)getParameter()、getHeader()等等方法。
2、文件上传不走HttpServletRequestWrapper,需要继承CommonsMultipartResolver,重写方法
1.2、CSRF攻击
1.2.1 CSRF简介
CSRF全称是跨站请求伪造(cross site request forgery),CSRF伪装受信任用户,向第三方平台发送恶意请求
案例:比如你曾经在浏览器访问过银行A的网站,所以浏览器是有保存Cookie的,Cookie并没有过期,这时,你不小心登录一个恶意的论坛网站还是什么网站,你访问了链接(其实链接后面加的是窃取Cookie,调银行A网站转账API),这时候,如果网站安全性验证不过的话,就会窃取金钱的恶意操作
1.2.2 解决方案
1、设置Cookie为HttpOnly
我们知道CSRF是通过窃取Cookie来发送恶意请求的,所以我们可以为Cookie设置HttpOnly属性,这样JavaScript或者Applet就不可以恶意发送请求了
2、添加Token验证
竟然Cookie有被恶意窃取的可能性,那么我们或许可以另辟新径,我们可以在访问请求时加上Token,服务端再进行验证,Token验证通过则可以访问,否则限制访问,当然这个Token不可以放在Cookie里
3、添加Referer识别
学习HTTP协议的你可能知道,在HTTP的请求头里有个参数叫Referer,这个参数其实就是记录了请求的来源地址
案例:针对刚才的银行转账窃取案例,我们或许可以这样改造,我们可以再增加一个验证的工程,不给直接调用转账接口,我们在这个验证工程里加入Referer识别的。这时候,CSRF攻击的话,肯定得在非银行A官网的服务器发送请求,我们改造之后,这个请求会先发送到验证工程这里,这时候解析请求,获取Referer属性进行识别,发现不是银行A官网的地址,这时候直接拦截,拒绝访问。
1.3、SQL注入攻击
1.3.1 SQL注入简介
所谓SQL注入攻击就是将一些恶意SQL执行指令伪装成SQL参数传给DBMS,然后执行恶意攻击
1.3.2 解决方案
1、使用预编译语句
学习JDBC都知道这个语句
Statement st = (Statement) conn.createStatement();
创建一个Statement对象,看起来是没啥问题,可是对黑客来说这就是SQL注入的一个很好的代码缺陷了
创建Statement对象后,之后我们就是要执行SQL,执行时候是这样的,是将SQL发送给DBMS编译然后再执行的,Statement没有编译的方法。不过PreparedStatement就不一样了,PreparedStatement继承Statement接口,有预编译的方法,编译SQL之后呢,在发送给DBMS执行
2、必要的加密
预防SQL注入有时候是有必要进行一些加密措施的,比如用户密码这些重要信息,我们可以MD5加密一下,避免明文保存。
1.4、DDos攻击
1.4.1 DDos攻击简介
DDos(Distributed Denial of Service),即分布式拒绝服务攻击,DDos攻击是基于Dos发展来的。
什么是Dos呢?首先简单介绍一下Dos,Dos就是利用信任的客户端向服务端频繁发送请求,从而达到服务器处理不过来,请求超时。所以Dos其实就是一对一的,在邮件设施还不太好的情况是有效的,对于性能极佳的服务器压根不管用了,所以就有了DDos,分布式拒绝服务攻击。
DDos攻击过程大概是怎么样的呢?
竟然是分布式,首先黑客可能会通过程序控制大量的计算机,然后通过这个计算机群在同一个时间,发送大量的请求到目标服务器,从而达到服务器处理不过来,请求超时的情况。
1.4.2 DDos常用方式
下面简单介绍一下两种DDos攻击的方式SYN Flood和DNS Query Flood
【SYN Flood】
SYN Flood是DDos的一种攻击方法,SYN Flood是互联网最经典的攻击方式之一。这个攻击是通过TCP连接建立的,攻击前先建立TCP连接,这个需要对TCP的三次握手和四次挥手协议有一定了解,其攻击过程大概如图,图来自互联网
【DNS Query Flood】
DNS Query Flood攻击从名称其实可以猜测出和DNS有关的了,首先简单介绍一下DNS,DNS(Domain Name System)是位于应用层的协议,负责域名解析服务,DNS通过域名查找IP地址,或逆向从IP地址反向查找域名。
然后DNS Query Flood攻击是怎么做到的呢?
攻击过程大致为:
通过程序控制,向目标服务器的DNS服务器,发送大量的域名解析请求,不过这些域名基本是随机生成的,比如改下端口什么的。
DNS服务器接收到域名之后,先去缓存里查找是否有这个域名,然后发现没有,之后,DNS服务器就会向上层的DNS服务器递归查询了,指导向上查询了全球13台根DNS服务器。这时候肯定会出现域名解析超时的情况。
第二章 常用加密算法
2.1 数字摘要算法
2.1.1 数字摘要算法简介
所谓数字摘要其实就是通过一个Hash函数获取指导长度的摘要字段,这段字段也可以叫做数字指纹,然后解密时,通过验证摘要也即数字指纹。大概过程如图
2.1.2 常用数字摘要算法
MD5:也即信息摘要算法5,Message Digest Algorithm 5,是数字摘要算法的一种实现,Md5由Md4、Md3、Md2改进而来,其摘要长度为128位
SHA:SHA也即安全散列算法(Secure Hash Algorithm),SHA-1算法生成的摘要信息的长度为160位,由于生成的摘要信息更长,运算的过程更加复杂
2.2 对称加密算法
2.2.1对称加密过程
对称加密过程大致分为加解密过程,加密过程就是明文和密钥通过特定加密算法进行封装之后,变成密文,发送给数据接收方,数据接收方,同样用相同的算法的逆过程进行界面,用相同的密钥去匹对。
2.2.2常见对称加密算法
DES算法全称数据加密标准(Data Encryptin Standard),属于对称加密算法。
明文按64位进行分组,密钥长64位,但事实上只有56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1),分组后的明文和56位的密钥按位替代或交换的方法形成密文。
AES算法全称高级加密标准(Advanced Encryption Standard),由DES算法发展而来,设计有三个密钥长度:128,192,256位,比DES算法的加密强度更高,更为安全。
2.3 非对称加密算法
2.3.1 非对称加密过程
非对称加密算法和对称加密算法类似,不过就是分为了公钥和私钥,加密过程可以用公钥,也可以用私钥,解密过程同理。
2.3.2 常见非对称加密算法
RSA算法:够抵抗到目前为止已知的所有密码攻击,已被ISO推荐为公钥数据加密标准。
算法设计基本来自简单的数论事实:将两个大素数相乘十分容易,但反过来想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。