
Python Tutorial 第五堂(2)表單與 CSRF
Python Tutorial 第五堂(1)使用模版系統 << 前情 目前你的 有沒有想過,如果在不同 App 的 練習 13:建立 URL 名稱空間與簡易表單在目前的 mysite/urls.py 檔案中,在 接下來,你就可以在模版中使用這個名稱空間設定,例如,修改 polls/index.html 模版: 接著要來建立一個簡易表單了,修改 polls/detail.html,如下包括 HTML 的 在 polls/views.py 中增加以下內容與修改 當然,我們必須建立 polls/results.html 模版檔案: 接著你可以試著連結網站,在上頭作些投票,你應該可以看到以下結果: 簡介 CSRF在練習 13 中看到了個 一個 CSRF 攻擊的情境範例會像是 …
瀏覽器遇到 對於 HTTP 請求,有些人會有 GET 不安全,而 POST 比較安全的錯誤觀念,乍看這個例子好像是如此,實際上,也可以透過 POST 來發動類似的請求。例如: <a href="http://www.harmless.com/" onclick=" var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = 'http://www.example.com/account/destroy'; f.submit(); return false;">好康在這裡</a> 就算不點選,只要滑鼠略過圖也可以 … <img src="http://www.harmless.com/img" width="400" height="400" onmouseover="..." /> 就算沒有任何滑鼠操作,現在只要利用一些 JavaScript 寫些 Ajax 請求,都有可能讓這類攻擊發生 … 先前談過,CSRF 是利用 Web 應用程式在設計 HTTP 請求時,因為考量不周全造成的漏洞,因此,防範方式就是認真思考 HTTP 請求方法之使用。單就
(實際上要考量的不只有等幂性,還有請求方法是否安全(Safe),進一步地,在 REST 架構設計下,還有更多的 HTTP 請求方法(像是 PUT、DELETE 等)考量,可參考 重新認識HTTP請求方法。) 如果 GET 確實地應用於等冪操作,對於非 GET 請求,通常會用個安全代碼,在 Django 中,這可由 當你瀏覽表單時, Django 應用程式接受請求時,必須同時在請求中找到這組安全代碼,從而確認請求是來自於同一站上的表單。 (這個例子並不單只是如何防範 CSRF,主要想表達的是,安全其實是現代設計應用程式時應主動納入的考量,現在有不少框架也將安全納為特色之一,讓開發者不用煩惱安全防護實作時的枝微末節。) |