資料庫安全性操作——操作原則及SQL隱碼攻擊

weixin_33896726發表於2017-05-23

轉載請註明出處:http://www.cnblogs.com/Joanna-Yan/p/6893134.html 

今天在進行支付寶開發時,看到支付寶開發文件《開放平臺第三方應用安全開發指南》中關於資料庫操作的安全性。特此記錄!

1.資料庫操作

(1)原則:使用者密碼儲存須加鹽儲存,各使用者鹽值不同。

(2)原則:若涉及證件號等敏感資訊的儲存,須使用AES-128演算法加密儲存。

(3)編寫的SQL必須預編譯,不允許通過字串拼接的方式合成。

    說明:1.部分特殊場景,必須通過拼接合成,則拼接的變數必須經過處理,只允許[a-zA-Z0-9_-.]+字元。

       2.參考SQL隱碼攻擊漏洞。

2.SQL隱碼攻擊漏洞

SQL隱碼攻擊,被廣泛用於非法獲取網站控制權,是發生在應用程式的資料庫層上的安全漏洞。在設計不良的程式當中,忽略了對輸入字串中夾帶的SQL指令的檢查,你們這些夾帶進去的指令就會被資料庫誤認為是正常的SQL指令而執行,從而使資料庫受到攻擊,可能導致資料被竊取、更改、刪除,以及進一步導致網站被嵌入惡意程式碼、被植入後門程式等危害。

2.1漏洞危害

(1)機密資料被竊取;

(2)核心業務資料被篡改;

(3)網頁被篡改;

(4)資料庫所在伺服器被攻擊變為傀儡主機,甚至企業網被入侵。

2.2解決方案

(1)所有的查詢語句都使用資料庫提供的引數化查詢介面,引數化的語句使用引數而不是將使用者輸入變數嵌入到SQL語句中。

(2)對資料庫的特殊字串‘“\<>&*;等進行轉義處理,或編碼轉換。

(3)確認每種資料的型別,比如數字型等資料就必須是數字,資料庫中的儲存欄位必須對應為int型。

(4)資料長度應該嚴格規定,能在一定程度上防止比較長的SQL隱碼攻擊語句無法正確執行。

(5)網站每個資料層的編碼統一,建議全部使用UTF-8編碼,上下層編碼不一致有可能導致一些過濾模型被繞過。

(6)嚴格限制網站所用資料庫賬號的許可權,給辭使用者僅提供能夠滿足其工作的許可權,從而最大限度的減少注入攻擊對資料庫的危害。

(7)避免網站顯示SQL錯誤資訊,比如型別錯誤、欄位不匹配等,防止攻擊者利用這些錯誤資訊進行一些判斷。

2.3程式碼示例

2.3.1 JAVA漏洞程式碼示例

JdbcConnection conn = new JdbcConnection();
final String sql = "select * from product where pname like '%"
        + request.getParameter("pname") + "%'";
conn.execqueryResultSet(sql);

2.3.2 JAVA修復示例

JdbcConnection conn = new JdbcConnection();
PreparedStatement pstmt = conn.prepareStatement("select * from product where pname like ?";
pstmt.setString(1, “%”+ request.getParameter("pname")+”%”);
pstmt.execute();

如果此文對您有幫助,微信打賞我一下吧~ 

相關文章