2011年4月12日

[筆記]SQL Injection And Stored Procedure (Search Note)

看到有人正在討論關於 Stored Procedure 是否能防止 SQL Injection
查了一些相關網頁,特別在此做了一些紀錄:

[Are stored procedures safe against SQL injection?]
關於 SQL 攻擊的簡單說明,以及預防方法(建議)
這篇還不錯,最後六點我大概翻譯一下:



Validate all input coming from the user on the server.
(在伺服器驗證所有使用者的輸入)
// 執行效能與資料安全的抉擇

Avoid the use of dynamic SQL queries if there an alternate method is available.
(如果有其他額外的方法,請避免使用動態 SQL 語法查詢)
// 也就是儘量不要動態串接 SQL 指令內容

Use parameterized stored procedure with embedded parameters.
(使用參數化的預存程序與嵌入式參數)

Execute stored procedures using a safe interface such as Callable statements in JDBC or CommandObject in ADO.
(使用安全的預存程序執行介面,像是 JDBC 中的 Callable statements
或是 ADO 中的 CommandObject)

Use a low privileged account to run the database.
(使用低權限帳號去執行資料庫)

Give proper roles and privileges to the stored procedure being used in the applications.
(給予在應用程式中被使用的預存程序,適當的角色與權限)

[(Demo)利用SQL Injection將惡意連結寫入資料庫]
某 SQL 攻擊的模擬與簡單說明
好孩子不能模仿這個去攻擊別人的家園唷~~

[How To: Protect From SQL Injection in ASP.NET]
微軟官方針對 ASP.NET 的相關文章 ... 很有 MSDN 文章的味道 ...

[[教戰守則] 如何避免 SQL Injection?]
這邊有十點說明,作者的看法跟我相似,最後兩點會對維護性造成衝擊
預存程序這東西出現的真正用意,並不是要拿來防止 SQL 攻擊的唷XD

[Are stored procedures safe against SQL injection?]
另一篇探討是否安全的文章,跟之前那篇雷同
最後那六點重點一樣是最重要的,與上面相同就不贅述

[SQL Injection Attacks by Example]
不清楚你的系統是否有漏洞?參考這邊的範例,嘗試攻擊自己的系統吧!!
請不要去玩其他人的系統唷,小心觸法XD

===

事實上,預存程序本身 並沒有保護 SQL 攻擊的能力 ,使用參數化的設定,
是可以直接避免很多 SQL CMD 字串直接被串接的機會,減少可被攻擊的標的。

但是,實際要防止 SQL 攻擊的有效方式,不是 使用預存程序 本身,
而是綜合各種設定(包括權限管理)的結果。

===

追加相關連結:

[淺談SQL Injection發生後]

[SQL Injection (資料隱碼)– 駭客的 SQL填空遊戲(上)]

沒有留言: