它們比做像mysql_query("SELECT important_data FROM users WHERE password = $password")
這樣的東西更容易受SQL注入的影響嗎?SQL存儲過程是否安全?
回答
他們比你所做的更安全。您的查詢將原始SQL發佈到數據庫,這意味着您的參數不被視爲sql參數,而是作爲普通的舊sql。
這是我的意思。
使用存儲過程的密碼變量不能是sql,它必須是系統正在查找的一條信息。在您的例子什麼是真正發送到DB是
SELECT * FROM用戶其中password =( '您的密碼在這裏' - $密碼變量).....所以有人能做到像
SELECT *從用戶WHERE密碼=('您的密碼在這裏';選擇*從用戶 - $密碼變量)。
或更糟糕的是:
SELECT * FROM用戶WHERE密碼=( '你的密碼在這裏'; DROP DATABASE DATABASE_NAME - $ password變量)。
非動態sql存儲過程不會允許這樣做,因爲輸入參數不會作爲額外的sql執行。
參數化的SQL確實照顧到了這一點,但技術上存儲過程仍然更安全一些,因爲訪問表中的信息的用戶不需要讀取訪問權限。它只需要能夠執行存儲過程。根據您的需要,這可能會或可能不會發揮作用。
所以基本上,使用存儲過程使所有輸入值不可執行,而使用原始SQL允許將數據解釋爲代碼。得到它了。 – Green 2012-10-24 17:54:25
大部分是的,你可以使用參數化的sql並在那裏獲得相同的好處,並且你可以編寫存儲過程來執行動態代碼,這樣你就可以撤銷你從中獲得的安全性,但總之是肯定的。 – kemiller2002 2012-10-24 18:09:13
沒有安全技術。技術只能用於安全或不安全的方式。
也就是說,存儲過程需要稍微更多的創意編碼才能允許SQL注入 - 儘管如此。在我意識到的任何SQL數據庫引擎中,沒有什麼能夠阻止你連接字符串。
不一定,你可以在裏面做字符串連接,並且曝光會相同。如果你使用動態sql和參數變量(沒有字符串連接來產生SQL),你會得到很好的保護。
如果他們正確參數,你是不是在做動態SQL那麼他們更安全,你也只要您使用參數,不使用字符串連接的用戶受益於執行計劃重用
輸入的值,不會有SQL注入的風險。存儲過程在這方面有點「更安全」,因爲它們鼓勵你使用參數。但是,如果在你的程序做一些像
EXECUTE 'SELECT important_data FROM users WHERE password = ' + @password
然後你會回到原點1,並非常容易受到SQL注入。
此外,還有一種「預先準備的語句」,它不是存儲過程,但也可以使用參數。因此它們可以用來避免SQL注入。
- 1. 這個存儲過程是否安全,避免SQL注入?
- 2. 該存儲過程是否安全的從sql注入?
- 3. 該存儲過程是否線程安全? (或任何equiv在SQL Server上)
- 4. 存儲過程vs無存儲過程 - 安全視點
- 5. 從SQL注入中製作SQL Server存儲過程安全
- 6. 是否安全地存儲getContext的值
- 7. HTML5會話存儲是否安全?
- 8. 存儲在線程安全集合線程中的對象是否安全?
- 9. 修改存儲過程是否更新存儲過程定義?
- 10. 將UI線程的TaskScheduler存儲在字段中是否安全?
- 11. 是否WCF緩存存儲過程
- 12. 存儲過程/ SQL
- 13. SQL存儲過程
- 14. SQL存儲過程
- 15. SQL存儲過程
- 16. SQL存儲過程
- 17. SQL存儲過程
- 18. 如何檢查SQL Azure中是否存在存儲過程?
- 19. SQL Server - 是否有可能逐步通過存儲過程
- 20. 是否有可能在Sql服務器級別創建全局存儲過程
- 21. 存儲過程中的預準備語句是否安全地使用SQL注入?
- 22. 是否應將源代碼管理中的SQL存儲過程存儲?
- 23. 存儲過程是否鎖定表/行?
- 24. 檢查存儲過程是否有效
- 25. 是否可以調用存儲過程?
- 26. 是否mysql_insert_id線程安全?
- 27. 是否log4j線程安全?
- 28. NSPasteboard是否線程安全?
- 29. RegExp.MatchString是否線程安全?
- 30. SeekableStream是否線程安全?
這是容易被SQL注入的CLASSIC方法 - 將東西連接在一起形成一個SQL語句並且不驗證任何用戶輸入(例如對於$ password)。 – 2009-06-21 14:52:23
是的,我認爲這就是reyjavikvi所說的:使用數據庫存儲過程比使用示例中構造的SQL查詢更安全。 – cheduardo 2009-06-21 15:04:26