2010-11-29 30 views
0

據我所知(我沒有深入研究django的管理源代碼),Django的管理員直接將GET查詢參數轉換爲查詢過濾條件。django - 允許任意用戶輸入的數據輸入到過濾器() - 這是安全的嗎?

我想知道,這種方法足夠安全,可用於面向用戶的應用程序嗎?我有一個數據列表,它必須接受任意的WHERE子句,並且我正在考慮通過將GET參數轉換爲字典來實現它,以便它可以傳遞到queryset的filter()方法中。

回答

0

我認爲正確的答案是:「不,這不是安全的」

http://www.djangoproject.com/weblog/2010/dec/22/security/

的Django剛剛發佈的安全修復1.2.4和1.3b1防止用戶任意構建查詢過濾器。充分了解底層數據模型和正則表達式的用法,可以提取任意信息,例如用戶的密碼哈希。

3

是的。

輸入將被轉義,所以不會有SQL注入攻擊或類似的東西。但是,輸入可能對您正在搜索的字段無效。或者它可能根本沒有意義,所以最好做一些形式的驗證(如輸入日期必須大於其他日期,輸入值必須小於X等)

但是如果您想要將用戶收到的數據顯示爲頁面的一部分,則需要確保正確地轉義該數據。 Documentation on the autoescape tag