Django之CSRF跨站請求僞造(老掉牙的釣魚網站模擬)

首先這是一個測試的代碼css

請先在setting頁面進行下面操做html

註釋完成後,開始模擬釣魚網站的跨站請求僞造操做:前端

前端代碼:jquery

<!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):bootstrap

視圖代碼以下:後端

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')

 

若是是一個正常的網站,運行結果應該以下:函數

提交:post

後端的結果:測試

這樣是沒有任何問題的,可是若是網站沒有進行防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攻擊也就沒用了

相關文章
相關標籤/搜索