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、重置密碼而不是恢復密碼