2011-07-28 48 views
3

我有兩個用戶創建並通過Python應用程序連接到數據庫,在sqlite3.connect()中使用用戶輸入變量時是否存在安全風險?

  dbname = raw_input("Please enter the game name you wish to connect to, or the name of a new game: ") 
      db = sqlite3.connect(dbname) 

我很好奇:有沒有一種輸入一個潛在惡意用戶可以用它來攻擊數據庫(提供我有其他處理程序中沒有其他漏洞),或者攻擊運行python的底層系統? (據我所知,用戶可以繼續一遍又一遍運行程序來創建數據庫無限多,但我想不出比配額任何其他解決方案可爲的)。

在此先感謝!

特拉維斯

+3

所有輸入,直到證明不是這樣,(1)的惡意,(2)願意打破你的代碼,(3)完全有能力這樣做。 (也就是說,這看起來不像典型的安全漏洞。) – delnan

回答

3

他們可以通過在":memory",這可能會或可能不會對系統產生不利影響,這取決於你的應用程序的功能。

他們可以control transactions(通過參數isolation_level),這可能會搞亂你的程序與數據庫的交互。

我會檢查用戶輸入針對可能的數據庫名稱的字典。

0

通常這些連接本身並不值得擔心。這是任何可能具有惡意或破壞性的查詢。讓用戶輸入要連接的數據庫的名稱不會構成我可以看到的安全威脅,但要確保您的查詢無風險注入。

1

你不應該允許的。想象一下,如果用戶輸入「全球熱核戰爭」會發生什麼?

在所有的嚴重性,你可能會想給用戶一個菜單,其中的ID例如1..5與遊戲代碼中使用像一個開關case語句建立數據庫名連接相關聯,則至。

0

如有疑問消毒數據,因爲:

garbage in == garbage out 

如果用戶輸入垃圾程序將最有可能輸出垃圾

引述:

所有輸入是,除非證實,(1)的惡意,(2)願意 破壞你的代碼,以及(3)完全有能力這樣做。 (也就是說,這 看起來並不像典型的安全漏洞。) - delnan

...

通過轉義,編碼等消毒它然後檢查針對白名單,不是黑名單(因爲它不檢查未知的危險不像白名單

相關問題