1. 程式人生 > 其它 >Django SQL注入漏洞

Django SQL注入漏洞

一、漏洞簡介

  Django是一個開放原始碼的Web應用框架,由Python寫成。採用了MVC的框架模式,即模型M,檢視V和控制器C。它最初是被開發來用於管理勞倫斯出版集團旗下的一些以新聞內容為主的網站的,即是CMS(內容管理系統)軟體。

  Django 元件存在 SQL 注入漏洞,該漏洞是由於對 QuerySet.order_by()中使用者提供資料的過濾不足,攻擊者可利用該漏洞在未授權的情況下,構造惡意資料執行 SQL 注入攻擊,最終造成伺服器敏感資訊洩露。

二、漏洞影響

影響版本

  Django 3.2
  Django 3.1

安全版本

  Django >= 3.2.5
  Django >= 3.1.13

三、產生原因

  在Django中,想要在資料庫中建立表並定義欄位是容易的,只需要在models.py檔案中宣告一個模型類即可。

  Django內建了一個ORM框架,從資料庫查詢出來的結果是一個合集,這個合集就是QuerySet。而order_by這個方法的作用,一般是將查詢出來的結果按照某欄位的值,由小到大或由大到小進行排序。在views.py的檢視函式中,先是獲取到了使用者傳入的引數值order(如果沒有傳入引數預設值為id)。然後到Collection表中進行資料查詢,對返回的結果按照id值從小到大進行排序。

  最後使用values()函式將資料合集轉化成一個一個json的資料格式返回。

  比如返回的結果按照id值排序Collection.objects.order_by(‘id’),預設是從小到大的順序。如果想要變成從大到小,只需要把’id’變成’-id’即可。因此可以通過在引數值前面加’-'來判斷,如果返回的順序顛倒了那麼就是使用了order_by。