這可能看起來像一個明顯的(或不是那麼明顯)的問題,但讓我解釋一下。我正在使用Google的數據庫技術BigTable編寫Google App Engine網站。任何App Engine編碼器都會知道Google有自己的有限查詢語言,稱爲GQL。因此,我不想在我的應用程序中對SQL(或GQL)注入進行任何檢查,因爲我認爲Google沒有在其後端方法上使用原始字符串查詢來獲取數據。此外,像CouchDB,MongoDB和其他對象或文檔(又名NoSQL)數據庫的數據庫技術庫似乎無需檢查惡意用戶是否正在注入數據庫操作命令。他們經常有圖書館直接映射數據庫中的對象,以您選擇的語言來對象。我知道有很多SQL庫可以做到這一點,但我認爲在某種程度上他們將參數組合起來以對字符串運行查詢,因此即使對於這些框架,我也必須使用SQL注入保護。使用非SQL數據庫是否避免防範「SQL注入」?
我是否近視?或者,直到下一個偉大的數據庫系統成功,這只是一個時間問題,然後我會看到注入這些系統?
糾正我,如果我錯了,但GQL只允許SELECT查詢,所以假設你從'SELECT ... FROM kind'開始,沒有什麼可以附加到修改數據,除了選擇相同實體類型的「行」以外,沒有其他辦法可以做,除非選擇「行」,或許你不打算看到這些行。如果用戶被允許查看特定類型的所有「行」,則不存在注入攻擊。 – Eloff
當然,但是SELECT可能會在錯誤的手中足夠危險,典型的例子是'WHERE username ='...'AND password ='...''被擴展爲WHERE username ='admin'或者username =' x'和密碼='x'可以登錄到沒有密碼的管理員帳戶,但取決於在應用程序邏輯上有很多潛在的漏洞。 – bobince