如何為您的 Django 網站新增安全功能?
透過 Web 進行通訊是透過 HTTP 連線進行的,而且大多數情況下,您永遠不知道另一端是誰。它可能是您的使用者之一,但也可能是一個惡意駭客,正在尋找可乘之機。來自瀏覽器的任何資料,無論其來源如何,都應謹慎處理並檢查是否存在威脅。這包括來自 Web 表單的資料以及來自 HTTP 標頭、cookie 和其他請求元資料的資訊。
作為 Web 開發人員,我們有責任盡我們所能來對抗這些黑暗勢力。每個 Web 開發人員都需要將安全視為 Web 程式設計的基本方面。不幸的是,事實證明實施安全措施非常困難。
攻擊者只需要找到一個漏洞,但防禦者必須防禦每一個漏洞。Django 試圖減輕這種困難。它旨在自動保護您免受許多新手和經驗豐富的 Web 開發人員常犯的安全錯誤的影響。
儘管如此,瞭解這些問題是什麼、Django 如何保護您以及最重要的是您可以採取哪些措施來使您的程式碼更安全仍然很重要。
一些對安全構成威脅的攻擊包括 SQL 注入、跨站指令碼 (XSS)、跨站請求偽造 (CSRF) 和點選劫持保護。
SQL 注入
SQL 注入是一種常見的漏洞,攻擊者可以透過修改 Web 頁面引數(如 GET/POST 資料或 URL)來將任意 SQL 程式碼片段注入到一個簡單的 Web 應用程式的資料庫中。這可能導致記錄被刪除或資料洩露。毫無疑問,這是最致命且不幸的是最常見的漏洞之一。
示例
假設,您有一個部落格,其中有一個電子郵件列表,您每週都會向該列表傳送時事通訊。隨著時間的推移,您的電子郵件列表增長了很多,包含了許多電子郵件。如果您想阻止訪問整個聯絡人列表,則會提示使用者輸入他們的使用者名稱和電子郵件地址。
使用提供的使用者名稱,您將訪問電子郵件地址,這樣做會使您的資料面臨風險,因為攻擊者可以使用使用者名稱注入 SQL 查詢來收集、更新或刪除您的電子郵件地址列表。
解決方案
解決此問題的方法是永遠不要信任並直接使用使用者輸入的資料。在將其直接傳遞到 SQL 時始終對其進行轉義。開發人員無需擔心硬編碼,Django 資料庫 API 提供了保護您的網站免受此攻擊的方法。它會根據您正在使用的資料庫伺服器(如 PostgreSQL 或 MySQL)的引用約定自動轉義所有特殊的 SQL 引數。
跨站指令碼
在將使用者提交的文字呈現到 HTML 中之前未能適當地對其進行轉義的 Web 應用程式容易受到跨站指令碼 (XSS) 的攻擊。攻擊者可以使用此方法將任意 HTML 注入到您的 Web 頁面中,通常以 <script> 元素的形式。
為了防止跨站指令碼,開發人員必須轉義使用者輸入的資料,而不是直接使用它。
點選劫持
點選劫持是一種攻擊,其中惡意網站使用框架包含另一個網站。由於這種攻擊,不知情的使用者可能會被誘騙在目標網站上執行不希望的操作。
Django 以 X-Frame-Options 中介軟體的形式提供了點選劫持預防功能,該中介軟體可以防止網站在相容瀏覽器中的框架內呈現。