資安院透過網路攻防演練與資安技術檢測,驗證政府機關資安防護成效。
我們透過資安院公開資訊(資通安全防護巡迴研討會),針對常見的弱點類型,分析攻擊手法、舉例說明,並且給予修補建議,供相關人員參考。
使用弱點檢測工具做檢測,有時報告會判斷為低風險,系統團隊就不會去多注意。
檢測工具計算風險值的方式會同時考量風險的可能性、業務影響、技術影響等因素計算出來。
⚠️所以報告呈現低風險,不代表系統就沒有漏洞及弱點,低風險對駭客是有用的資訊⚠️
這裡參考資安院提供之網路攻防演練結果,發現常見的弱點類型包括以下:
🗣️白話的說:
● 主要關注「身份確認與驗證過程」
● 重點在於系統未正確驗證用戶身份或允許未經授權的用戶登入
● 目的是確認「你是誰」以及是否有權登入系統
OWASP Top 10 ▶ ▶ 🔗A07:2021 – 認證及驗證機制失效
(1) 使用弱密碼
攻擊者有機會使用暴力破解的方式,破解帳號及密碼。密碼設置過短、沒有複雜度且使用弱密碼,密碼被破解
📢弱密碼:指容易被猜測或破解的密碼,通常包含過於簡單或常見的字母、數字組合,或是未充分混合字符類型。
例如: "123456"、"password"、"qwerty" 、"asdfgh"、"111111"或是個人訊息等。
修補建議
密碼強制使用複雜度(大寫字母、小寫字母、數字、特殊符號 ),長度基本要8碼,最好12碼以上 。
限制登入嘗試次數,設定失敗的登入次數或鎖定帳號,防止攻擊者進行暴力破解,帳號可以在一段時間後自動解鎖,或通過驗證流程解鎖。
啟用多因素驗證(MFA),增加多因素驗證(如一次性密碼、驗證應用程式或硬體令牌),即使密碼被破解,也能阻止未經授權的登入。
設定密碼的有效期,並要求用戶定期更新密碼(例如每 90 天),但避免過於頻繁的更換,以免用戶使用更簡單的密碼。
🙋舉例
發現登入畫面,嘗試使用弱帳號密碼猜測登入(帳號:123456,密碼:123456),
發現可以登入成功,取得帳號權限。
(2) 驗證碼設計瑕疵
驗證碼的設計不完善,導致它無法有效地防範機器人和暴力破解攻擊,增加了系統被攻擊的風險。
📢驗證碼:一種區分使用者是機器或人類的公共全自動程式,圖片辨識為常見。
修補建議
驗證碼應隨每次登入而更新,防止重複使用,避免攻擊者可以繞過驗證功能不斷重送資料。
🙋舉例
不安全的驗證碼程式寫法:
這段程式碼(以php為例)是一個驗證碼並顯示在登入頁面上,但驗證碼在多次登入嘗試中保持不變,並且在成功或失敗後不會失效。
<?php
session_start();
// 檢查是否已生成驗證碼,若無則生成
if (!isset($_SESSION['captcha'])) {
$_SESSION['captcha'] = rand(1000, 9999); // 生成四位數的驗證碼
}
// 處理登入請求
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
$userCaptcha = $_POST['captcha'];
// 驗證帳號、密碼和驗證碼
if ($userCaptcha == $_SESSION['captcha']) {
// 假設帳號和密碼正確
echo "登入成功!";
} else {
echo "驗證碼錯誤,請重試!";
}
}
?>
⚠️驗證碼可重複使用:以上的範例驗證碼保會存在 $_SESSION['captcha'] 中,且無論登入成功或失敗,都不會更新。攻擊者可以反覆使用相同的驗證碼,嘗試不同的帳號和密碼組合來進行暴力破解。
安全程式寫法:
建議在「處理登入請求」程式碼中最後加上
// 無論成功與否,重置驗證碼
$_SESSION['captcha'] = rand(1000, 9999); // 更新為新的驗證碼
(3) 列舉帳號
攻擊者可以透過登入回應訊息判斷帳號是否存在,進而列舉出存在的帳號,下一步駭客可能使用暴力破解出密碼。
修補建議
對所有結果使用相同的訊息回應,統一登入錯誤回應,避免透露帳號是否存在的訊息。
避免使用弱密碼。
🙋舉例
不安全程式寫法舉例:
my $username=param('username');
my $password=param('password');
if (IsValidUsername($username) == 1){
if (IsValidPassword($username, $password) == 1){
print "Login Successful";
}else{
print "Login Failed - incorrect password";
}
}else{
print "Login Failed - unknown username";
}
安全訊息統一回覆:
"Login Failed - incorrect username or password"
(4) Session 固定攻擊(Session Fixation)
攻擊者可以利用固定 Session的弱點,在使用者登入後繼續使用相同的 Session,從而取得使用者的登入狀態和權限。Session 在登入前後未更新,導致Session被劫持。
📢Session:一種持久網路協定,在用戶端(或使用者代理)和伺服器端之間建立關聯,從而起到交換封包的作用機制,session在網路協定(例如telnet或FTP)中是非常重要的部分。
參考:維基百科
修補建議
在登入與登出時應更新 Session Cookie,應在登出後確實註銷Cookie,確保Session安全,不會被劫持。
禁止使用URL (GET) 方式來傳遞Session ID。
(5) 繞過前端限制
攻擊者透過開發人員工具修改 HTML 元素,繞過了前端權限限制,進行了未授權的操作,例如:「刪除 disabled 屬性,可以打開某個按鈕使用」、「修改 HTML 中的 maxlength 屬性,可以繞過了輸入長度限制,舉例:帳號/密碼程度限制12碼,透過修改前端maxlength 屬性值可以任意加長長度」。
修補建議
所有重要的權限檢查應該在後端進行,而非僅依賴前端的禁用屬性,即使前端界面禁用了某些選項,後端也必須對用戶的權限進行嚴格驗證。
權限機制完善,後端應檢查每個請求,確保發起操作的使用者具有相應的權限,例如:即使前端使用者修改了 HTML,後端應拒絕未經授權的權限修改請求。
移除不必要的前端資訊,避免在前端界面中顯示無權限的操作按鈕或選項,攻擊者可能利用這些來發現攻擊點。
🙋舉例
🗣️白話的說:
● 主要關注「存取權限」的管理
● 重點在於系統未正確限制用戶存取不同層級的資料或功能,導致低權限用戶能執行高權限操作
● 目的是確保「你可以做什麼」受到正確的限制
OWASP Top 10 ▶ ▶ 🔗A01:2021 – 權限控制失效
(1) 不完整的存取控管
低權限使用者可以透過修改參數,就能查看高權限使用者的資料或使用跨權限的功能。這種不完整的存取控管問題就像是,你沒有登入系統,但只要貼上特定網址,就能看到登入後才能訪問的內容,這就是權限被錯誤跨越的情況。
修補建議
針對網站環境中的權限控管做相關設定,要先檢查使用者登入的帳號是不是真的有權限去碰到這個頁面。
當使用者嘗試修改個人資料時,應確認是否有權限修改該筆資料,避免使用者修改其他使用者之資料。
🙋舉例
一家醫療系統網站,設有一般用戶和管理員兩種權限。
一般使用者可以查看自己的醫療紀錄,無法查看其他人的資料;管理員則擁有更高的權限,可以管理所有病患的醫療紀錄。
某天,一般用戶 "Alice" 登入網站並查看她的醫療紀錄。她注意到自己的醫療紀錄 URL 是:
https://medicalsystem.com/record?patientID=123
Alice試想能否修改 patientID 參數來查看其他病患的資料。
於是她將網址中的 patientID=123 更改為 patientID=456,竟然成功查看了另一名病患的紀錄。
(2) 發現後台管理頁面路徑
攻擊者可以透過猜測 URL 存取管理後台,例如:/admin、/login、/administrator等可能為後台管理頁面的路徑名稱或檔案。
修補建議
限制後台 IP 存取,僅允許特定 IP 存取管理後台頁面。
後台管理頁面不開對外。
資料夾命名不以常見的文字命名。
🙋舉例
https://companysite.com/admin
https://companysite.com/login
https://companysite.com/administrator
⚠️儘管發現後台頁面仍然需要登入,但攻擊者現在知道了後台管理頁面的確切位置,就可以接續找可以被利用的漏洞,例如:帳號列舉、暴力破解等惡意攻擊。
🗣️白話的說:
● 主要關注「系統或應用程式的設置問題」
● 重點在於系統的安全設定不正確或不完整,讓系統暴露於攻擊風險,甚至存取不該碰到的東西
● 目的是確保系統設置正確,並能夠保護應用程式不受攻擊
OWASP Top 10 ▶ ▶ 🔗A05:2021 – 安全設定缺陷
(1) 目錄清單顯示
未妥善配置伺服器,顯示資料夾下的檔案列表。攻擊者是可以利用這些目錄清單找出可以利用的資訊與弱點,可能還有機會發現機敏資訊。
修補建議
禁用目錄清單顯示,當用戶存取無檔名 URL 或是非權限可以瀏覽的網頁時,顯示 403 禁止存取錯誤、客製化維修頁面或是直接導向特定頁面。
🙋舉例
(2) IIS目錄列舉
針對微軟的IIS服務,可對 Windows8.3 短檔名規範的檔案或目錄進行猜測,攻擊者可以列舉伺服器的目錄結構。攻擊者可傳送特殊符號,用以猜測網頁資料夾及檔案名稱,取得未公開的程式檔案,造成敏感資料外洩的問題。
修補建議
如果沒有必要使用Windows8.3 短檔名,可透過修改 web.config 或使用 fsutil 指令來停止這項功能。
使用系統管理員命令,清除已存在的短檔名,避免再生成新的短檔名。
關閉目錄列舉功能,防止攻擊者透過檢視目錄內容來獲取文件結構,增強目錄的安全性管理。
(3) 上傳檔案格式未驗證
攻擊者可以任意上傳惡意文件,進行遠端代碼執行。網站允許使用者上傳資料,但是未對檔案格式/副檔名進行驗證或限制,使攻擊者可以直接上傳惡意程式、木馬或是後門程式,進而取得網站控制權。
修補建議
驗證使用者上傳的檔案,設計安全的上傳檔案功能。
🙋舉例
假設一個網站允許使用者上傳文件(如 .pdf、.docx 檔案),但沒有對上傳檔案的副檔名或格式進行驗證。攻擊者可以上傳其他副檔名的文件,例如惡意的 shell.php 檔案。上傳成功後,攻擊者只需打開 shell.php,就可能對系統執行惡意操作或發起攻擊。
(4) 使用GET傳送方式
透過 GET 傳遞的資料會顯示在 URL 上,可能被攻擊者窺視、擷取或從瀏覽器歷史記錄中取得。常常看到 URL 後面是?加上一個參數,就是使用GET傳送方式。
修補建議
使用 POST 傳遞機敏資訊,避免機敏資料顯示在 URL 中,降低洩漏風險。
🙋舉例
(1) 用戶登入狀態查詢
URL:https://www.example.com/profile?user_id=12345
說明:當使用者點擊個人資料頁面,GET 方法會傳送用戶的 ID(如 user_id=12345)來顯示對應的個人資料。
不適合使用 GET 的原因: 將 user_id 等敏感資料放在 URL 中容易被截取或洩漏。URL 通常會被記錄在瀏覽器歷史紀錄、伺服器日誌和第三方分析工具中,這會增加資料外洩的風險。
(2) 訂票系統查詢
URL:https://www.example.com/tickets?from=NYC&to=LAX&date=2024-10-31
說明:在訂票系統中,GET 方法可用來查詢航班資訊,傳送出發地、目的地和日期等參數。
不適合使用 GET 的原因:
如果查詢涉及更多個人化資料,如:身份證號碼、信用卡資訊或其他敏感個人資料,則 GET 傳送方式會將這些資訊暴露在 URL 中,存在安全風險。
**若只涉及一般查詢(如:日期、城市名稱),GET 是可接受的。但當查詢涉及個人身份識別資訊時,應使用 POST 並進行適當的加密。
(5) 開放式導向功能(Open Redirection )
Open Redirect 弱點是指應用程式允許使用者提供的網址參數(URL)決定導向位置,但這個參數未經驗證就被直接用來執行重導(redirect),攻擊者可以藉此將使用者引導到惡意網站。
此弱點引發的資安風險:
釣魚攻擊(Phishing):
攻擊者可以發送看似來自可信網站的連結,騙取使用者點擊並重導到偽造頁面,誘騙輸入帳密或機敏個資。
信任誤導:
使用者看到網址開頭是官方網站,會誤以為是安全連結,降低警覺性。
與其他攻擊手法結合:
可配合 XSS、Cookie 偷竊、Session Fixation 等提高攻擊效果。
修補建議
不要信任使用者輸入的 URL 或跳轉參數。
建立白名單機制,僅允許導向至可信站點。
使用固定的跳轉代碼或 ID 來代表預設頁面,而非直接用 URL。
重新導向前進行驗證,例如檢查 URL 是否為內部域名。
🙋舉例
假設某銀行網站登入頁網址如下:
https://bank.example.com/login?redirect=https://bank.example.com/dashboard
這是很常見的設計,用來在使用者登入成功後,自動導回原本要去的頁面。
攻擊者如發現這個網站沒有檢查 redirect 的網址是不是內部網站,於是嘗試這樣的連結:
https://bank.example.com/login?redirect=https://phishing.evil.com
攻擊者即可將此連結包裝成正常的連結,誘騙使用者輸入帳密或機敏個資。
防禦注意事項:👉可參考這篇
(6) Robots.txt 檔案暴露網站結構
Robots.txt設置不妥攻擊者可以輕易查看並發現這些可能包含敏感資料的路徑,這種資訊會讓攻擊者掌握網站結構資訊,進而針對這些目錄發動攻擊。Robots.txt 會對所有人公開,所以如果在 Robots.txt 文件中列出了不希望被爬取的頁面或目錄,對於攻擊者來說是很有利的資訊。
📢Robots.txt 檔案:Robots.txt 檔案位於網站根目錄的簡單文本檔案,用來指示搜尋引擎爬蟲哪些頁面或資源可以被爬取、哪些頁面應該被排除,避免爬蟲爬取大量不必要的頁面或動態內容,這樣可以節省伺服器資源,並加快對重要頁面的索引速度。
檔案位置:https://www.example.com/robots.txt
⚠️Robots.txt 不等於隱私保護:它只是指引爬蟲的工具,無法完全防止未經授權的存取,如果有機密資料需要保護,應使用其他方式如密碼保護或加密。⚠️
⚠️不是所有爬蟲都遵守:只有遵循規範的爬蟲(如大多數搜尋引擎的爬蟲)才會遵守Robots.txt,惡意爬蟲可能會忽視這些規則。⚠️
修補建議
使用正面表列方式設定 robots.txt,避免暴露不必要的目錄,先選可以存取的,在拒絕全部存取。
🙋舉例
以下是一個不安全的 Robots.txt 檔案範例:
User-agent: *
Disallow: /admin_panel
Disallow: /user_data
Disallow: /backup
Disallow: /config/settings
Disallow: /private_reports
⚠️以上Robots.txt列出了多個不希望被爬取的路徑,包含 /admin_panel(後台管理)、/user_data(用戶資料)、/backup(備份)、/config/settings(設定文件)和 /private_reports(私人報告)。由於 Robots.txt 對所有人公開,攻擊者可以輕易地發現這些敏感路徑,並針對它們發動攻擊。⚠️
安全的修改建議:
使用正面表列的方式:僅允許搜尋引擎爬取公開資料夾,其他內容則禁止存取。
User-agent: *
Allow: /public
Allow: /about
Disallow: /
這樣設定會允許搜尋引擎僅爬取 /public 和 /about 這些無敏感內容的頁面,其他敏感資料夾不會顯示出來。
✨google官方說明:如何編寫及提交 robots.txt 檔案
(7) 網站設定檔未移除
當網站的設定檔(如config.json、package.json 等)未從伺服器上移除或限制存取時,攻擊者可以藉此獲得系統的配置訊息,例如:軟體版本、伺服器路徑等,進而找到系統漏洞或進行進一步的攻擊。
修補建議
移除或限制存取設定檔,系統部署到正式環境時,移除不必要的開發檔案或備份檔案,並確保這些檔案不會被公開存取而洩系統漏訊。
(8) 錯誤訊息顯示機密資訊
錯誤訊息過於詳細記錄在網頁上,可能暴露伺服器資訊和資料庫查詢等資訊,讓攻擊者可以找出有機會被利用的漏洞。
修補建議
自訂錯誤頁面,隱藏伺服器回應中的敏感資訊。
客製化維修頁面、直接導向特定頁面或是統一錯誤頁面。
🙋舉例
一個電子商務網站的購物車系統出現錯誤。當使用者將商品加入購物車時,由於伺服器端出現問題,頁面顯示了以下錯誤訊息:
Error: SQL Syntax Error in /add_to_cart.php at line 45
SELECT * FROM Products WHERE productID = 'xyz';
Database: MySQL 5.6, Server: Apache 2.4.3, File Path: /var/www/html/shop/add_to_cart.php
⚠️以上例子錯誤訊息過於詳細,不僅揭示了資料庫類型(MySQL 5.6)和伺服器資訊(Apache 2.4.3),還包含了 SQL 查詢結構和文件路徑。
攻擊者可以利用這些資訊發現網站使用的資料庫類型、伺服器配置,甚至針對 SQL 查詢結構進行 SQL 注入攻擊。
🗣️白話的說:
● 主要關注「敏感資料的加密與保護問題」
● 重點在於系統沒有正確加密或保護敏感資料,導致數據被攔截或洩露
● 目的是確保敏感資料在傳輸、儲存和處理過程中都受到有效的加密保護
OWASP Top 10 ▶ ▶ 🔗A02:2021 – 加密機制失效
(1) Cookie 沒有 HTTPOnly 和 Secure 屬性
Cookie 缺少 HttpOnly 屬性時,JavaScript 可以存取該 Cookie,增加了跨站腳本攻擊(XSS)的風險。
未設置 Secure 屬性,Cookie 可能會在未加密的 HTTP 連線中傳輸,導致訊息被攔截的風險。
未設置 SameSite 屬性,Cookie 可能被第三方網站利用,從而引發跨站偽造請求攻擊(CSRF)的風險。
修補建議
設置 HTTPOnly 屬性:限制 Cookie 只能在伺服器端存取,防止 JavaScript 讀取,從而減少 XSS 攻擊風險。
設置 Secure 屬性:確保 Cookie 僅在加密的 HTTPS 連線中傳輸,避免資料在不安全連線中被竊取。
設置 SameSite 屬性:設定為 SameSite=Strict 以防止 Cookie 被第三方網站利用,若需要跨站使用,可設置為 SameSite=Lax。
(2) 發現網站有機敏資料
因為網站未做機敏性資料加密,導致機敏性資料外洩,例如:密碼、信用卡卡號、健康紀錄、個資、以及需要額外保護的營業祕密等等。
修補建議
對應用程式處理、儲存、傳輸的資料進行分類,根據個資法、法令法規、或商業需求辨識哪些為敏感性資料。
非必要不儲存敏感性資料,盡快刪除或使用符合PCI DSS的資料記號化(tokenization)。
PCI DSS:代表「支付卡產業資料安全標準」(PCI DSS)。PCI DSS 框架為企業提供強大的流程,以保護持卡人交易資料和卡片認證資訊的安全性。它旨在保護持卡人資料和認證資料,要求幫助防止、偵測和對安全事件做出反應。
🗣️白話的說:
● 主要關注「應用程式未能正確處理輸入數據」
● 重點在於應用程式允許惡意資料插入到查詢語句或命令中,導致攻擊者可以操控應用程式
● 目的是確保應用程式正確過濾和處理所有用戶輸入
OWASP Top 10 ▶ ▶ 🔗A03:2021 – 注入式攻擊
(1) SQL 注入攻擊(SQL injection)
使用者輸入欄位的內容未經前端或後端過濾,攻擊者可以插入惡意的 SQL 查詢,進一步操控資料庫,包括執行新增、刪除、修改等。
修補建議
需要將命令與查詢資料分開,以防止注入式攻擊。
使用參數化查詢,將所有與資料庫互動的查詢改為使用參數化查詢,防止 SQL 注入。例如,在 PHP 中可以使用 PDO 或 MySQLi 來處理參數化查詢。
對所有使用者輸入進行嚴格的驗證和過濾,確保輸入的資料不包含惡意語法。例如,對輸入的數字、字母、特殊符號進行過濾,或限制特定格式的輸入。
🙋舉例
舉一個簡單的登入系統(以php為例),程式直接將使用者輸入的帳號和密碼放入 SQL 查詢語句中:
<?php
// 使用者登入輸入
$username = $_POST['username'];
$password = $_POST['password'];
// 不安全的 SQL 查詢
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $query);
// 檢查登入結果
if (mysqli_num_rows($result) > 0) {
echo "登入成功";
} else {
echo "登入失敗";
}
?>
攻擊者可以在 username 欄位輸入以下內容:
' OR '1'='1
使查詢語法會變成:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '';
⚠️這個語句繞過了帳號和密碼檢查,因為OR '1'='1' 永遠為真,攻擊者就能成功登入系統,無需輸入正確帳號和密碼,即可成功登入。 ⚠️
(2) 跨站腳本攻擊(XSS)
用者輸入欄位未經前端或後端過濾(特殊符號),導致攻擊者可以注入可執行的惡意JavaScript 語法。JavaScript 語法可以存取cookie、可以將使用者導向惡意網站、下載惡意程式等等造成嚴重風險。
修補建議
對所有使用者輸入進行嚴格過濾和編碼,防止跨站腳本攻擊。
🙋舉例
舉一個簡單的留言板系統(以php為例),使用者可以提交留言,但系統未對輸入內容進行過濾或編碼,直接將內容顯示在頁面上:
<?php
// 使用者輸入的留言
$message = $_POST['message'];
// 不安全地顯示留言
echo "<p>留言內容: $message</p>";
?>
攻擊者可以在 message 欄位中直接輸入以下內容:
<script>alert('您的帳戶可能被攻擊了!');</script>
留言內容在頁面顯示為:
<p>留言內容: <script>alert('您的帳戶可能被攻擊了!');</script></p>
⚠️當其他用戶訪問這頁面時,瀏覽器會執行這段 JavaScript,並彈出一個警告視窗顯示訊息「您的帳戶可能被攻擊了!」。這證明了 XSS 的存在,攻擊者可以利用這個漏洞進行更危險的操作,例如:竊取 cookie 或重定向使用者到惡意網站。
(1) 套件/第三方元件版本過舊 or 漏洞
系統中使用了含有已知漏洞的第三方元件或是過舊版本,這些元件沒有及時更新,可能存在CVE漏洞或是功能上的缺陷,導致應用程式暴露在已知攻擊手法之下。
修補建議
定期檢查與更新元件版本,使用可信來源的套件庫
使用工具(如 Snyk、OWASP Dependency-Check、OSV-Scanner)掃描已知漏洞,或是自動排程掃描
導入 SBOM(Software Bill of Materials)
追蹤 CVE 與供應商公告
⚠️更新套件/第三方元件時應注意:
檢查系統其他元件的相容性
備份與版本控制,避免直接在正式環境更新
確認更新來源可信
(2) 來源IP偽造
X-Forwarded-For(簡稱 XFF)是 HTTP request 的一個標頭欄位,主要用途是使用者原始 IP 位址,可讓後端系統管理員看到來源IP,即使使用者是透過代理伺服器(如 CDN 或反向代理)進行連線,也能追溯最初的發送者。但X-Forwarded-For是可能被偽造的,這讓駭客有機可乘,透過自行設定這個欄位的值,來偽造來源 IP,進而達到以下目的:
繞過 IP 黑名單或限制機制:例如網站限制每個 IP 的登入次數,駭客可以每次請求都換一個假的 IP,繼續暴力破解帳密。
隱藏攻擊來源:偽造他人 IP 進行攻擊,增加追蹤與調查困難度。
假冒內部 IP 取得權限:部分系統會信任 127.0.0.1 或 內網 IP 作為內部來源,駭客偽造這類 IP 有可能觸發不當授權。
修補建議
僅信任可信任的 Proxy 設定
不直接使用 XFF 作為安全判斷依據
登入保護、API 存取控制請以 REMOTE_ADDR 為基準
可將 XFF 作為輔助資訊,不要單獨信任
過濾日誌記錄的欄位內容
避免將 XFF 原文直接寫入 HTML 介面或報表,防止 XSS
建議進行格式過濾及長度限制
🙋舉例
系統網站友設計對同一個IP嘗試登入5次就會封鎖IP
駭客每次送出請求時加上一個不同的 XFF IP:
X-Forwarded-For: 1.1.1.1
X-Forwarded-For: 2.2.2.2
...
結果系統誤判這是來自不同 IP 的登入行為,限制完全失效,暴力破解成功!
如何正確的取得使用者 IP?👉點我參考
(3) 忘記密碼設計瑕疵
指系統提供的密碼重設機制存在安全問題,讓攻擊者可以未經授權地重設他人密碼,進而取得帳號控制權。
常見設計瑕疵:
信件未驗證身分:
使用者輸入信箱後直接收到重設信,沒有先驗證是否為使用著的信箱。
攻擊者可透過竄改/撞庫信箱觸發大量 reset 行為,造成帳號鎖定。
使用可預測的驗證碼或 token:
如果這個 token 是可猜測的或沒過期限制,攻擊者就能暴力猜中。
無效的 session 驗證:
使用者尚未登入卻可以任意請求重設別人的帳號密碼。
修補建議
通知帳號擁有者:
每次重設行為都寄送通知信(不論是否成功)
Token 設計安全與使用者帳號綁定:
使用難以預測的亂數(如 UUID + HMAC)
設定時效(如15 分鐘內有效)
Token 只能對應該帳號,並且僅能使用一次
限制 reset 次數與速率:
防止惡意大量觸發
強制使用者重新登入或雙重驗證後重設