CSRF(Cross Site Request Forgery)跨站请求伪造
攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
CSRF 利用的是网站对用户网页浏览器的信任。
一个典型的CSRF攻击有着如下的流程:
-
受害者登录a.com,并保留了登录凭证(Cookie)
-
攻击者引诱受害者访问了b.com。
-
b.com 向 a.com 发送了一个请求:a.com/act=xx。浏览器会默认携带a.com的Cookie。
-
a.com接收到请求后,对请求进行验证,并确认是受害者的凭证,误以为是受害者自己发送的请求。
-
a.com以受害者的名义执行了act=xx。
-
攻击完成,攻击者在受害者不知情的情况下,冒充受害者,让a.com执行了自己定义的操作。
常见的攻击类型
- GET类型的CSRF
- POST类型的CSRF
防护措施
CSRF(通常)发生在第三方域名,不能获取到Cookie等信息,只是使用。
利用head里的Referer头,防盗链
增加随机码
CORS 跨域资源共享
XSS:(Cross Site Scripting)跨站脚本攻击
指攻击者在网站上注入恶意的客户端代码,通过恶意脚本对客户端网页进行篡改,从而在用户浏览网页时,对用户浏览器进行控制或者获取用户隐私数据的一种攻击方式。
XSS 利用的是用户对指定网站的信任
反射型
存储型
不论是 Cookie 还是 token 都无法避免跨站脚本攻击(Cross Site Scripting)XSS。
攻击者插入一段可执行的 JavaScripts 脚本,该脚本会读出用户浏览器的 cookies 并将它传输给攻击者,攻击者得到用户的 Cookies 后,即可冒充用户
采用HTTP-Only Cookies
XSS攻击代码过滤(js下的js-xss,JAVA下的XSS HTMLFilter)
Replay Attacks
重放攻击是攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程。比如在浏览器端通过用户名/密码验证获得签名的Token被木马窃取。即使用户登出了系统,黑客还是可以利用窃取的Token模拟正常请求,而服务器端对此完全不知道。
黑客拿到了令牌怎么办,要是有中间人劫持,拦截了怎么办”之类的安全问题,并不是JWT的锅,而是传输协议的锅。HTTP协议 明文传输信息而造成的安全问题
采用了HTTPS协议通信,无法获取请求的任何数据
cookie被禁用
给用户一个提示:你的cookie已经被禁用了,请启用cookie
Base64
加密算法
加密技术是对信息进行编码和解码的技术。编码是把可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码。加密技术的要点是加密算法,加密算法可以分为三类:
对称加密,如AES
将明文分成N个组,然后使用密钥对各个组进行加密,形成各自的密文,最后把所有的分组密文进行合并,形成最终的密文。
优势:算法公开、计算量小、加密速度快、加密效率高
缺陷:双方都使用同样密钥,安全性得不到保证
非对称加密,如RSA
同时生成两把密钥:私钥和公钥,私钥隐秘保存,公钥可以下发给信任客户端。
私钥加密,持有私钥、公钥才可以解密;公钥加密,持有私钥才可以解密;
优点:安全,难以破解
缺点:算法比较耗时
不可逆加密 MD5,SHA
加密过程中不需要使用密钥,输入明文后由系统直接经过加密算法处理成密文,这种加密后的数据是无法被解密的,无法根据密文推算出明文。