<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # CSRF * 全稱為Cross Site Request Forgery,跨站請求偽造 * 某些惡意網站上包含鏈接、表單按鈕或者JavaScript,會利用登錄過的用戶在瀏覽器中的認證信息視圖在web網站上完成默寫操作,這就是跨站攻擊 * 創建login用于展示表單 * 創建crsf用于接收post請求 ```text def login(request): return render(request,'myapp/login.html') def crsf(request): name = request.POST['name'] context = {'name':name} return render(request,'myapp/crsf.html',context) ``` * 配置url ```text url(r'^crsf/$',views.crsf), url(r'^login/$',views.login), ``` * 創建模板login.html用于展示表單 ```text <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="post" action="{% url 'myapp:crsf' %}"> <input name="name"/><br /> <input type="submit" value="提交" /> </form> </body> </html> ``` * 創建模板crsf用于展示接收的結果 ```text <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{ name }} </body> </html> ``` * 在訪問中,如果報錯如下: ![](https://box.kancloud.cn/491662728b927bcbd94c2027a28a12f9_430x366.png) * 將settinsg.py的中間件代碼"django.middleware.crsf.CrsfViewMiddleware"注釋 * 查看login的源碼,復制,在自己的網站內建一個HTML文件,粘貼源碼,訪問查看效果 ## 訪crsf的使用 * 在django的模板中,提供了防止跨站攻擊的方法,使用步驟如下: * 1.在settings.py中啟動"django.middleware.crsf.CsrfViewMiddleware"中間件,此項在創建項目時,默認被啟用 * 2.在login.html中添加標簽 ```text <form> {% csrf_token%} .... </from> ``` * 3.測試剛才的兩個請求,發現跨站的請求被拒絕了,效果如下: ![](https://box.kancloud.cn/c6361790d0f9a36b7c1b7edcfc6c23ac_399x228.png)- ## 取消保護 * 如果某些視圖不需要保護,可以使用裝飾器crsf\_exempt,模板中也不需要寫標簽,修改crsf的視圖 ```text from django.views.decorators.csrf import csrf_exempt @csrf_exempt def crsf(request): name = request.POST['name'] context = {'name':name} return render(request,'myapp/crsf.html',context) ``` * 運行上面的兩個請求,發現都可以請求 ## 保護原理 加入標簽后,可以查看源代碼,發現多了如下代碼 ```text <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form method="post" action="/crsf/"> <input type='hidden' name='csrfmiddlewaretoken' value='T6CFH7Q5sIepoujVMrnFnpEtkErPQowirYBwDi2icLkJt9g3Eb9EC3TXQL0KDA7X' /> <input name="name"/><br /> <input type="submit" value="提交" /> </form> </body> </html> ``` * 在瀏覽器的調試工具中,通過network標簽可以查看cookie信息 * 本站中自動添加了cookie信息,如下圖 ![](https://box.kancloud.cn/95c2ce88626455e924ac38c33823b066_624x58.png) * 查看跨站的信息,并沒有cookie信息,即使加入上面的隱藏域代碼,發現又可以訪問了 * 結論:django的csrf不是完全的安全 * 當提交請求時,中間件'django.middleware.csrf.CsrfViewMiddleware'會對提交的cookie及隱藏域的內容進行驗證,如果失敗則返回403錯誤
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看