SQL反模式學習筆記20 明文密碼
- 2019 年 10 月 4 日
- 筆記
目標:恢復或重置密碼
反模式:使用明文存儲密碼
1、存儲密碼
使用明文存儲密碼或者在網絡上傳遞密碼是不安全的。
如果攻擊者截取到你用來插入(或者修改)密碼的sql語句,就可以獲得密碼。
黑客獲取密碼的方式有很多種:
(1)在客戶端和服務器端數據庫交互的網絡線路上接貨數據包。比如使用Wireshark黑客軟件。
(2)在數據庫服務器上搜索SQL的查詢日誌。
(3)從服務器或者備份介質上讀取數據庫備份文件內的數據。
2、驗證密碼:同上。
3、在Email中發送密碼:Email的收發都需要經由網絡層傳輸,數據可能會在其他的路由節點上被黑客劫持。
如何識別反模式:當出現以下情況時,可能是反模式合理使用反模式:
1、能夠恢復你的密碼;
2、將密碼通過郵件以明文或可逆轉的加密的格式發給你的程序。
合理使用反模式:
1、你的程序可能需要使用密碼來訪問一個地第三方的服務,這意味着你的程序可能是一個客戶端,
必須使用可讀的格式來存儲這個密碼。最好的做法是使用一些程序能夠解碼的加密方法來存儲,
而不是直接使用明文的方式存儲在數據庫中。
2、並不是所有的程序都有被攻擊的風險,也不是所有的程序都有敏感的程序需保護的信息。
內文通訊的程序,只使用認證機制就可以了。
解決方案:
1、先加密再存儲
(1)哈希是指將輸入字符串轉換成為另一個新的、不可識別的字符串的函數。
哈希算法是不可逆的。
(2)在SQL中使用哈希
哈希函數並是標準的SQL語言,因此你可能要依賴於所使用的數據庫提供的哈希擴展。
insert into Accounts(AccountId,AccountName,password)
values(123,'billKarwin',SHA2('xyzzy'));—MySQL6.0.5的擴展函數
(3)給哈希加料
使用哈希值替換原來的明文密碼,但是黑客仍然能夠破解你的哈希值。通過他們預先準備好的自己的數據庫,
裏面存儲的可能的密碼與對應的哈希值,然後比較久可以找出明文密碼。
預防這種「字典攻擊」的一種方法是給你的密碼加密表達式加點佐料。具體方法是在將用戶密碼傳入哈希函數進行
加密之前,將其和一個無意義的字符串拼接在一起。
SHA2('password') = '5exxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxd8';
SHA2('password-0xT!sp9') = '72xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx5b';
佐料的合理長度應該是8個位元組。
(4)在SQL中隱藏密碼
只要不將明文密碼放到SQL查詢語句中,就能避免泄露。
具體做法:在程序代碼中生成密碼的哈希字符串,然後在SQL查詢中使用哈希串。
(5)在網絡傳輸中,還有一個地方是攻擊者有機會接貨網絡數據包的:在用戶的瀏覽器和網站服務器之間。
當用戶提交了一個登錄表單時,瀏覽器將用戶的密碼以明文方式發送到服務器端,隨後服務器端才能
使用這個密碼進行哈希運算。
解決方法:在用戶的瀏覽器發送表單數據之前就進行哈希運算。
但是這個方案也有一些不足的地方,就是你需要再進行正確的哈希運算之前,還要通過別的途徑來獲得和
這個密碼相關聯的佐料。這種方案是在從瀏覽器向服務器端提交表單密碼時,使用安全的HTTP(https)鏈接。
2、重置密碼而不是恢復密碼