# 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
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up