Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟)
首先這是一個測試的代碼
請先在setting頁面進行下面操作
注釋完成后,開始模擬釣魚網站的跨站請求偽造操作:
前端代碼:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width, initial-scale=1"><script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1"><link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet"><script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script> </head> <body> <form action="" method="post">轉賬人:<input type="text" name="user">轉賬對象:<input type="text" name="to_sb">轉賬金額:<input type="text" name="money"><input type="submit" value="轉賬"> </form> </body> </html>效果如下(很low):
視圖代碼如下:
def index(request):if request.method=='POST':user=request.POST.get('user')to_sb=request.POST.get('to_sb')money=request.POST.get('money')#打印一下轉賬結果print('%s給%s轉了%s元' % (user,to_sb,money))return HttpResponse('轉賬成功')return render(request,'index.html')?
如果是一個正常的網站,運行結果應該如下:
提交:
后端的結果:
這樣是沒有任何問題的,但是如果網站沒有進行防CSRF攻擊(基本不可能,現在的主流網站都有防CSRF攻擊),那么釣魚網站就可以偽裝,進行跨站請求偽造
接下來是釣魚網站的視角:
首先:我看見了下面這個特別low的頁面,發現沒有防CSRF(等會說防御),直接copy源碼
前端代碼:
?
?然后自己做一個和原網站一模一樣的網站:
?
?簡單的模擬一下,網址已經變了
該網址的前端頁面代碼:
<body> <form action="http://127.0.0.1:8000/index/" method="post">轉賬人:<input type="text" name="user">轉賬對象:<input type="text" ><input type="text" name="to_sb" value="詐騙犯" style="display: none">轉賬金額:<input type="text" name="money"><input type="submit" value="轉賬"> </form>>?
?和原網址的代碼對比,其他不變,但是轉賬對象的name值被取消了,并且還添加了一個input框,該input框的name值,是原轉賬對象的name值,value值也被寫死,還把該標簽隱藏,這樣你在轉賬對象中無論輸入什么,你都是白給,因為name='to_sb'的這個標簽的值已經被固定了,而且該表單的action函數還是原網站,所以說釣魚網站的后端不用寫post請求來之后的操作。
釣魚網站的后端代碼:
def test(request):return render(request, 'test.html')也就是說,后端邏輯用的原網站的邏輯,只是簡單的固定了轉賬人的值
運行一下:
前端釣魚頁面:
?
?當前網址還是:
轉賬:
跳到了原網頁
看看原網站的打印輸出:
?
?這樣已經老掉牙的釣魚網站的模型就完成了
?
防CSRF跨站請求偽造攻擊:
1.打開注釋
2.在頁面中添加:
?
?這樣防御就做好了(所以說是老掉牙的釣魚攻擊)
測試一下:
點擊轉賬:
這是因為在添加了{% csrf_token %}之后,該網站的前端代碼已經改變了
?
?該value是隨機的,刷新一下,值就會改變,也就是說,釣魚網站不能動態的獲取,那么CSRF攻擊也就沒用了
?
轉載于:https://www.cnblogs.com/98WDJ/p/10757789.html
總結
以上是生活随笔為你收集整理的Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何制作基础认证钓鱼页面?
- 下一篇: 利用XSS进行网页钓鱼