數據庫安全性操作——操作原則及SQL注入


轉載請注明出處: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();

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM