# XSS防範方法 ## Outline 1. 什麼是XSS 2. XSS的類型 3. XSS防範方法 ## 什麼是XSS 跨網站指令碼(Cross-Site Script; XSS)是一種常見的網站安全漏洞,攻擊者通過在目標網站輸入腳本代碼,然後使其在瀏覽器中執行,從而實現對用戶的攻擊。 XSS 攻擊通常發生在具有使用者輸入的網站上,例如表單輸入、討論區、評論區等。攻擊者利用網站未正確處理用戶輸入的漏洞,將腳本代碼嵌入網頁中。當其他用戶瀏覽該網頁時,瀏覽器會執行這些惡意腳本,導致攻擊者能夠竊取用戶的敏感資訊、在用戶間傳播惡意連結、修改網頁內容等。 ## XSS的類型 XSS 攻擊可以分為三種主要類型: 1. 存儲型 XSS:攻擊者將惡意腳本存儲在目標網站的資料庫中,當其他用戶訪問相關頁面時,腳本會從資料庫中提取並執行。 2. 反射型 XSS:攻擊者將惡意腳本嵌入 URL 中,當用戶點擊包含惡意腳本的 URL 時,網站會將腳本作為參數回傳,瀏覽器解析並執行該腳本。 3. DOM 型 XSS:攻擊者通過修改網頁的 DOM(文檔物件模型),在用戶瀏覽器中執行惡意腳本,從而達到攻擊目的。 ## XSS防範方法 防範 XSS 攻擊的主要方法包括: 1. 輸入驗證和過濾:對用戶輸入的數據進行適當的驗證和過濾,過濾掉潛在的腳本代碼。 2. 輸出編碼:在將用戶輸入的內容插入到網頁中之前,對其進行 HTML 編碼,以防止腳本被執行。 3. 使用安全性標頭:通過設置安全性標頭,如 Content-Security-Policy。 ### 在progam.cs中設定Security Header ```csharp //add security header app.Use(async (context,next) => { context.Response.Headers.Add("X-XSS-Protection", "1; mode=block"); await next.Invoke(); }); ``` ### 將前端傳至後端的值進行編碼 系統套件System.Web中有可以從新編碼的方法。 ```csharp //value 傳入 <script>alert(1)</script> string encodeValue = HttpUtility.HtmlEncode(value); //編碼後變為 <script>alert(1)</script> ``` 將資料已重新編碼後的格式存入DB,如果取出傳回前端,會以文字的形式顯示於瀏覽器上而不會觸發script。 <script>alert(1)</script> ## 補充 在網路上會找到很多舊版的資料。 ### asp.net 本身有提供防範XSS的機制 在Web.config中加入: ``` <pages validateRequest="true"></pages> ``` 但是在 asp.net Core 中已經不再使用Web.config,而validaterequest功能也被移除不用了。 ### 使用AntiXSS來重新編碼 於NuGet套件管理器中下載AntiXSS。 ``` string encodeValue = Encode.HtmlEncode(value); ``` 但AntiXSS目前並不支援 .net core。 ###### tags: `back-end`
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.