濮阳杆衣贸易有限公司

主頁 > 知識庫 > Django csrf校驗(yàn)的實(shí)現(xiàn)

Django csrf校驗(yàn)的實(shí)現(xiàn)

熱門標(biāo)簽:江蘇房產(chǎn)電銷機(jī)器人廠家 荊州云電銷機(jī)器人供應(yīng)商 悟空智電銷機(jī)器人6 外呼不封號系統(tǒng) 幫人做地圖標(biāo)注收費(fèi)算詐騙嗎 遼寧400電話辦理多少錢 蘇州電銷機(jī)器人十大排行榜 溫州旅游地圖標(biāo)注 電信營業(yè)廳400電話申請

引入:

通常,釣魚網(wǎng)站本質(zhì)是本質(zhì)搭建一個跟正常網(wǎng)站一模一樣的頁面,用戶在該頁面上完成轉(zhuǎn)賬功能

轉(zhuǎn)賬的請求確實(shí)是朝著正常網(wǎng)站的服務(wù)端提交,唯一不同的在于收款賬戶人不同。

如果想模擬一個釣魚網(wǎng)站,就可是給用戶書寫一個form表單 對方賬戶的input框沒有name屬性,然后你自己悄悄提前寫好了一個具有默認(rèn)的并且是隱藏的具有name屬性的input框。

如果想解決這個問題,當(dāng)轉(zhuǎn)賬請求發(fā)送給服務(wù)端后,服務(wù)端會給各臺機(jī)器返回一個隨機(jī)實(shí)時字符串。下一次,如果還有請求向服務(wù)端發(fā)時,服務(wù)端會校驗(yàn)字符串,若對不上的話服務(wù)端就拒絕訪問。這就是csrf校驗(yàn)。

那么form表單如何進(jìn)行csrf校驗(yàn)?zāi)兀?/p>

你只需要在你的form表單內(nèi)寫一個{% csrf_token %}就可以了

Ajax請求設(shè)置csrf_token的三種方式

示例:

urls.py

urlpatterns = [
    url(r'^transfer/', views.transfer),
]

settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]

第三種方式的js文件(官方文檔套用就行了)

function getCookie(name) {
    var cookieValue = null;
    if (document.cookie  document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i  cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie('csrftoken');

function csrfSafeMethod(method) {
  // these HTTP methods do not require CSRF protection
  return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}

views.py

def transfer(request):
    if request.method =='POST':
        username = request.POST.get('username')
        target_user = request.POST.get('target_user')
        money = request.POST.get('money')
        print('%s 給 %s 轉(zhuǎn)賬 %s元' %(username,target_user,money))
    return render(request,'transfer.html')

前端頁面 transfer.html

!DOCTYPE html>
html lang="en">
head>
    meta charset="UTF-8">
    title>Title/title>
    script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js">/script>
    link  rel="external nofollow"  rel="stylesheet">
    script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js">/script>
/head>
body>
form action="" method="post">
    {% csrf_token %}
    p>username:input type="text" name="username">/p>
    p>target_user:input type="text" name="target_user">/p>
    p>money:input type="text" name="money">/p>
    input type="submit">
/form>
button id="d1">發(fā)送ajax請求/button>


{% load static %}
script src="{% static 'myfile.js' %}">/script>
script>
    $('#d1').click(function () {
        $.ajax({
            url:'',
            type:'post',
            // 第一種方式 自己手動獲取
            {#data:{'username':'jason','csrfmiddlewaretoken':$('input[name="csrfmiddlewaretoken"]').val()},#}
            // 第二種方式 利用模板語法
            {#data:{'username':'jason','csrfmiddlewaretoken':'{{ csrf_token }}'},#}
            // 第三種     通用方式 引入外部js文件
            data:{'username':'hank'},
            success:function (data) {
                alert(data)
            }
        })
    })
/script>
/body>
/html>

csrf裝飾器

csrf裝飾器作用在FBV上

裝飾器模塊導(dǎo)入:

from django.views.decorators.csrf import csrf_exempt,csrf_protect

當(dāng)我們網(wǎng)站整體都校驗(yàn)csrf的時候 我想讓某幾個視圖函數(shù)不校驗(yàn)

@csrf_exempt #給哪個視圖函數(shù)加上,就不給哪個視圖校驗(yàn)csrf

當(dāng)我們網(wǎng)站整體都不校驗(yàn)csrf的時候 我想讓某幾個視圖函數(shù)校驗(yàn)

@csrf_protect  #給哪個視圖函數(shù)加上,就給哪個視圖校驗(yàn)csrf

注意:驗(yàn)證同時需要把'django.middleware.csrf.CsrfViewMiddleware'注銷掉

csrf裝飾器作用在CBV上

當(dāng)我們網(wǎng)站整體都不校驗(yàn)csrf的時候 我想讓某幾個視圖函數(shù)校驗(yàn)

from django.views import View
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt,csrf_protect


# @method_decorator(csrf_protect,name='post')  #第二種指名道姓地給某給方法裝
class MyHome(View):
    @method_decorator(csrf_protect)  #第三種 給類中所有的方法都裝
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request,*args,**kwargs)

    def get(self,request):
        return HttpResponse('get')
    # @method_decorator(csrf_protect)   #第一種方式
    def post(self,request):
        return HttpResponse('post')

注意:驗(yàn)證同時需要把'django.middleware.csrf.CsrfViewMiddleware'注銷掉

當(dāng)我們網(wǎng)站整體都校驗(yàn)csrf的時候 我想讓某幾個視圖函數(shù)不校驗(yàn)

總結(jié):給CBV加裝飾器 推薦使用模塊method_decorator

csrf_exempt 只能給dispatch方法裝

到此這篇關(guān)于Django csrf校驗(yàn)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Django csrf校驗(yàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • django免除csrf校驗(yàn)的方法

標(biāo)簽:三沙 臺灣 喀什 濟(jì)南 景德鎮(zhèn) 宿遷 黃山 欽州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Django csrf校驗(yàn)的實(shí)現(xiàn)》,本文關(guān)鍵詞  Django,csrf,校驗(yàn),的,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Django csrf校驗(yàn)的實(shí)現(xiàn)》相關(guān)的同類信息!
  • 本頁收集關(guān)于Django csrf校驗(yàn)的實(shí)現(xiàn)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    科尔| 汉中市| 名山县| 珲春市| 榕江县| 黄陵县| 霍林郭勒市| 鹤岗市| 临沂市| 阜城县| 伊宁市| 杂多县| 太和县| 景洪市| 阳朔县| 龙游县| 灵山县| 利辛县| 方城县| 遵义市| 北安市| 安龙县| 治多县| 教育| 格尔木市| 色达县| 郓城县| 新建县| 上饶县| 耒阳市| 康乐县| 壶关县| 囊谦县| 唐河县| 襄垣县| 鄢陵县| 蛟河市| 禹城市| 图木舒克市| 蒲城县| 万山特区|