[week11] - 關於資安


Posted by Kayla on 2020-12-19

雜湊 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

tags: 程式導師實驗計畫第四期 [BE101] Week11









Related Posts

[ JavaScript 08 ] Number 類型的內建函式

[ JavaScript 08 ] Number 類型的內建函式

Chapter 4 評估數據品質

Chapter 4 評估數據品質

Web開發學習筆記15 — 呼叫堆疊、同步與非同步、Promise、Async/Await、Conditional ternary operator

Web開發學習筆記15 — 呼叫堆疊、同步與非同步、Promise、Async/Await、Conditional ternary operator


Comments