# [網頁安全] 期中專題 ## 總而言之 你需要實作一個留言板,並提供註冊、登入、留言等功能(詳見下方功能需求),並盡可能確保其不存在安全漏洞。 ## 實作規範 **前端**允許使用任意框架或函式庫進行設計,諸如 React、jQuery、Bootstrap 等皆為可使用的範圍;若不想使用框架或函式庫當然也可以。 **後端**請使用 PHP 或任意語言撰寫之 CGI 程式進行開發;不得使用第三方函式庫 (library) 或網頁框架 (framework);可任意使用 apache、nginx 或其他你想使用的伺服器。 使用者帳號、密碼及留言請儲存於**資料庫**,可使用任意 DBMS 進行儲存。 其餘未提及事項可自由發揮。 ## 評分標準 1. 功能完成度 扣分制,預設為 60 分。只要下方提及的每一項功能(有標記 🛠 的項目)都有完成即為滿分;任意一項未完成則扣 10 分;UI/UX 不計入評分標準。 2. 安全攻防 - 在期中專題截止後會進入攻防階段 - 初始基本分為 20 分 - 若成功發現其他組的漏洞 - 黑箱測試期間:首位發現漏洞者 +3 分,分組制 - 白箱測試期間:首位發現漏洞者 +1 分 - 加分至 40 分為上限 - 若自己的服務被發現漏洞,一個漏洞 -3 分,不會倒扣至「功能完成度」的分數;同漏洞多人回報不重複計算 - 成功**修補**自己的漏洞,並經回報者確認後,可取回 1 分(修補需於測試期間至截止後一天內完成) - 成功**從 log 分析**出漏洞成因與攻擊時間,可再取回 1 分 - 回報漏洞或功能缺失:Email CC Victim & TA - Start hacking: 4/23 15:00 - Blackbox: 4/23 15:00 ~ 4/30 15:00 - Whitebox: 4/30 18:00 ~ 5/7 18:00 **遲交** 第 n 天扣 $3n + \sqrt{n+2.5^n}$ 分 **漏洞類型**:所有課堂有提及之漏洞類型皆允許回報,同時我們也允許課堂上未提及的漏洞形式。 **攻擊範圍**:該站架設的機器即為攻擊範圍,另外取得 RCE 請直接回報,禁止破壞他人網站環境 **前端相關攻擊**需能運作於最新版本的 Chrome 或 Firefox 或 Safari ### Out of Scope 以下類型的狀況並不定義為漏洞: 1. 部分實作未臻理想(如未添加推薦的安全相關 header),但並不能造成實際危害 2. Clickjacking 3. 需要依賴於特定網路環境才能達成的攻擊,如在內網側錄封包、ARP spoofing 4. 不重要的資訊洩漏。例如 PHP error message 顯示於網頁上,但並不能藉此進行近一步的攻擊 5. 實體攻擊 另外,嚴格禁止任何資源消耗型的 DoS 攻擊,包含但不限於網路資源、運算資源、儲存資源。 ## 功能需求 每個「🛠」符號代表一個未完成會扣分的功能;各大項目未完成視為未完成此作業。 ### 帳號系統 使用者需要可以註冊並登入其帳號才可以開始進行留言,每個使用者都至少要有以下欄位 1. 帳號及密碼 🛠 2. 大頭貼 🛠 其中大頭貼部分,需允許使用者 1. 直接上傳任意圖片 🛠 2. 從網址上傳圖片 🛠 不論何種上傳方式,皆需要將圖片儲存於伺服器端。 此外,所有登入後的使用者都需要可以**登出 🛠**。 ### 留言板 1. 任何登入的使用者都應可進行留言 🛠 2. 留言要可以被留言作者刪除 🛠 3. 留言內容需要支援 [Wikipedia 上所描述的 BBCode](https://zh.wikipedia.org/wiki/BBCode) 中的以下五種標籤 - `[b]`、`[i]`、`[u]` 🛠 - `[img]` 🛠 - `[color]` 🛠 5. 每則留言都允許添加一個任意類型的附件檔案 🛠 6. 所有登入的使用者都應能看到所有留言 🛠 7. 單則留言需要可以在一個獨立的頁面顯示出來 🛠 ### 管理頁面 你需要有實作一個管理頁面,只有**驗證身份為管理員的用戶才可以進入**,而管理頁面唯一的功能是**更改首頁的標題 🛠**。 你可以任意選擇此頁面身分驗證的實作方式,只要確保確實是可以進入的即可。 ### Logger (optional) 你可以詳細實作 logger 功能,以利之後被攻擊後的 log 分析,也可以使用 nginx / apache 等 server 內建的 access log 功能即可。