轉載請註明出處: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();
如果此文對您有幫助,微信打賞我一下吧~