日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟)

發(fā)布時(shí)間:2024/1/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先這是一個(gè)測(cè)試的代碼

請(qǐng)先在setting頁面進(jìn)行下面操作

注釋完成后,開始模擬釣魚網(wǎng)站的跨站請(qǐng)求偽造操作:

前端代碼:

<!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">轉(zhuǎn)賬人:<input type="text" name="user">轉(zhuǎn)賬對(duì)象:<input type="text" name="to_sb">轉(zhuǎn)賬金額:<input type="text" name="money"><input type="submit" value="轉(zhuǎn)賬"> </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')#打印一下轉(zhuǎn)賬結(jié)果print('%s給%s轉(zhuǎn)了%s元' % (user,to_sb,money))return HttpResponse('轉(zhuǎn)賬成功')return render(request,'index.html')

?

如果是一個(gè)正常的網(wǎng)站,運(yùn)行結(jié)果應(yīng)該如下:

提交:

后端的結(jié)果:

這樣是沒有任何問題的,但是如果網(wǎng)站沒有進(jìn)行防CSRF攻擊(基本不可能,現(xiàn)在的主流網(wǎng)站都有防CSRF攻擊),那么釣魚網(wǎng)站就可以偽裝,進(jìn)行跨站請(qǐng)求偽造

接下來是釣魚網(wǎng)站的視角:

首先:我看見了下面這個(gè)特別low的頁面,發(fā)現(xiàn)沒有防CSRF(等會(huì)說防御),直接copy源碼

前端代碼:

?

?然后自己做一個(gè)和原網(wǎng)站一模一樣的網(wǎng)站:

?

?簡(jiǎn)單的模擬一下,網(wǎng)址已經(jīng)變了

該網(wǎng)址的前端頁面代碼:

<body> <form action="http://127.0.0.1:8000/index/" method="post">轉(zhuǎn)賬人:<input type="text" name="user">轉(zhuǎn)賬對(duì)象:<input type="text" ><input type="text" name="to_sb" value="詐騙犯" style="display: none">轉(zhuǎn)賬金額:<input type="text" name="money"><input type="submit" value="轉(zhuǎn)賬"> </form>>

?

?和原網(wǎng)址的代碼對(duì)比,其他不變,但是轉(zhuǎn)賬對(duì)象的name值被取消了,并且還添加了一個(gè)input框,該input框的name值,是原轉(zhuǎn)賬對(duì)象的name值,value值也被寫死,還把該標(biāo)簽隱藏,這樣你在轉(zhuǎn)賬對(duì)象中無論輸入什么,你都是白給,因?yàn)閚ame='to_sb'的這個(gè)標(biāo)簽的值已經(jīng)被固定了,而且該表單的action函數(shù)還是原網(wǎng)站,所以說釣魚網(wǎng)站的后端不用寫post請(qǐng)求來之后的操作。

釣魚網(wǎng)站的后端代碼:

def test(request):return render(request, 'test.html')

也就是說,后端邏輯用的原網(wǎng)站的邏輯,只是簡(jiǎn)單的固定了轉(zhuǎn)賬人的值

運(yùn)行一下:

前端釣魚頁面:

?

?當(dāng)前網(wǎng)址還是:

轉(zhuǎn)賬:

跳到了原網(wǎng)頁

看看原網(wǎng)站的打印輸出:

?

?這樣已經(jīng)老掉牙的釣魚網(wǎng)站的模型就完成了

?

防CSRF跨站請(qǐng)求偽造攻擊:

1.打開注釋

2.在頁面中添加:

?

?這樣防御就做好了(所以說是老掉牙的釣魚攻擊)

測(cè)試一下:

點(diǎn)擊轉(zhuǎn)賬:

這是因?yàn)樵谔砑恿藍(lán)% csrf_token %}之后,該網(wǎng)站的前端代碼已經(jīng)改變了

?

?該value是隨機(jī)的,刷新一下,值就會(huì)改變,也就是說,釣魚網(wǎng)站不能動(dòng)態(tài)的獲取,那么CSRF攻擊也就沒用了

?

轉(zhuǎn)載于:https://www.cnblogs.com/98WDJ/p/10757789.html

總結(jié)

以上是生活随笔為你收集整理的Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。