雜湊 VS 加密
雜湊跟加密的差別
名稱 | 是否可反推回字串 | 說明 | Note |
---|---|---|---|
加密 Encryption | 是 | 原理和編碼類似,用 key 來作為資料的保護,但加密解密需要 key 的值,例如凱薩加密利用每個字母加上一個偏移量 | 缺點是知道 key,即能夠回推知道原先的值,安全性較低 |
雜湊 Hash | 否 | 透過 hash function ,將資料轉換成完全不一樣的樣貌。 | 1. 湊雜函示是單向,沒有辦法透過結果回推湊雜前的內容。2.不同值的輸入,有極低的機率會有一樣的湊雜值,稱作碰撞 |
為什麼密碼要雜湊過後才存入資料庫?
如果在資料庫所儲存的是明碼,那麼在資料庫被駭時,使用者的資料會完全沒有防護一覽無遺。經過雜湊在儲存至資料庫的原因在於,無法回推回雜湊前的結果,就算駭客進入到資料庫,也無法知道使用者所設定的密碼為何,因為不同密碼輸入,有可能得到相同的雜湊值。
駭客是怎麼攻擊的
1. SQL Injection
攻擊原理:利用未處理輸入資料漏洞,網站會將輸入是為一段程式執行,運用 SQL 指令去串改資料。
EX:當 or 1=1條件成立,駭客就能取得 admin 資料
select * from users where username = 'admin' and password = '' or '1'='1'
防範方法:
不使用使用者所輸入的值來組合 SQL,透過 Prepared Statment 來防禦。
$sql ="insert into kayla_comments(username, content) values(?,?)"; // 要帶入的值用?表示
$stmt = $conn->prepare($sql);// 把 sql 傳進給 prepare
$stmt->bind_param('ss', $username, $content); //傳入參數:S->string/i->integer,後面接要帶入的參數
$result = $stmt->execute(); // 執行 stmt query
2. XSS
攻擊原理:能夠在他人網站上執行程式,當輸入一段程式碼,在沒經過處理狀態,所輸入的不會被視作一段文字,利用沒有防範使用者可以自行輸入的漏洞,去執行去執行一段程式,例如轉址導向其他釣魚網站。
防範方法:在使用者能夠輸入送出資料的地方,加以處理,將輸入的東西視為文字而非一段程式碼。
3. CSRF
攻擊原理:利用瀏覽器的運行機制,在登入狀態時,發送 request 到某個網域,且偽造成使用者本人,將使用者的 cookie 資料一併帶到其他 domain。
防範方法:1. 在每次結束使用網站時,登出。2. 使用其他驗證輔助(圖形驗證/傳送簡訊驗證)3. 透過 browser 將原先的set-cookie
後面加 SameSite set-cookie:.....; SameSite