之前我們詳細介紹了跨站腳本攻擊(XSS)的攻擊原理與基本防禦,這次就更進一步,將XSS攻防融入MVC架構中,從Model、View、Controller三層出發,完整打造安全的網頁應用。
完整防禦XSS必須兼顧這三層。
雖然XSS主要是輸出層的問題,但在模型層可做基礎驗證減少異常資料,例如限制字串長度、剔除絕對危險字元。
public class CommentModel
{
[StringLength(500)]
[RegularExpression(@"^[^<>]*$", ErrorMessage = "Invalid characters detected.")]
public string Content { get; set; }
}
使用MVC內建的Model Validation功能驗證輸入資料,同時避免直接操作原始輸入,確保資料合乎規範。
[HttpPost]
public IActionResult PostComment(CommentModel model)
{
if (ModelState.IsValid)
{
// 儲存模型資料,確保資料清潔
dbContext.Comments.Add(model);
dbContext.SaveChanges();
return RedirectToAction("Index");
}
return View(model);
}
Razor語法自帶自動HTML編碼功能,使用@
符號輸出資料會自動轉譯,避免惡意腳本執行。
@model CommentModel
若需要在JavaScript或HTML屬性中使用資料,務必採用Contextual Encoding。
部署並啟動本機MVC網站。
使用瀏覽器或Burp Suite攔截介面,輸入含有XSS腳本的留言:
觀察View層是否顯示為純文字(正常)或執行彈窗(異常)。
修改輸入驗證規則與View層顯示方式,確保安全。
再次使用OWASP ZAP或Burp Suite掃描網站,確認XSS漏洞是否消失。
XSS問題始終是網頁安全的常見陷阱,要從MVC架構的整體角度出發,從輸入到輸出都不可掉以輕心。本篇整合了MVC核心層級的防護措施與實務測試流程,能幫助開發者建立更堅實的網頁防護外殼。
鐵人賽文章建議演示實際操作流程,截圖顯示程式碼輸入與測試結果,並撰寫修補前後比較,內容會非常豐富且具說服力。