Microsoft Anti-XSS (Anti-Cross Site Scripting Library) 避免XSS攻擊

摘要:Microsoft Anti-XSS (Anti-Cross Site Scripting Library) 避免XSS攻擊
.HtmlEncode()的作法:
Sanitizer的 .GetSafeHtml()方法產生整個網頁
Sanitizer的 .GetSafeHtmlFragment()方法,只過濾內容

 


 

 

 

 

上週日講課,提到SQL Injection(數據注入、資料隱碼)攻擊 與 XSS攻擊

做一下補充。

 

先介紹一下相關的文章:

保護 ASP.NET 應用程式的安全  (微軟MSDN雜誌,中文).....最詳細!
 
[Security - XSS 類別] 較安全的程式碼撰寫方法 - .NET 控制項篇
 
MICROSOFT ANTIXSS LIBRARY 3.1 UPGRADE 4.0
 
大師兄回來了 - MICROSOFT WEB PROTECTION LIBRARY 4.3.0
 
防止XSS攻擊套件 Microsoft Anti-Cross Site Scripting Library
 
較安全的文字呈現方式

 

.....................................................................................................................................

檔案由此下載(v4.3)

http://www.microsoft.com/en-us/download/details.aspx?id=43126

Visual Studio的用戶,您也可透過Nuget取得最新版本

.....................................................................................................................................

 

 

 

舉例來說,下面的作法都可能造成危險,您可以透過這些字串檢查一下網站或是網頁程式能否正確過濾、處理這些資訊(資料來源:維基百科):

 

  • ><script>alert(document.cookie)</script>
  • ='><script>alert(document.cookie)</script>
  • "><script>alert(document.cookie)</script>
  • <script>alert(document.cookie)</script>(註:竊取、窺視Cookie)
  • <script>alert(vulnerable)</script>
  • %3Cscript%3Ealert('XSS')%3C/script%3E(註:隱藏 < 與 >符號,趁機加入script程式)
  • <script>alert('XSS')</script>
  • <img src="javascript:alert('XSS')">(註:假借圖片檔名,輸入JavaScript指令)
  • <img src="http://xxx.com/yyy.png" onerror="alert('XSS')">
  • <div style="height:expression(alert('XSS'),1)" />(註:僅限 IE 有效)
 
各種可能的XSS攻擊情況,可以參閱微軟文章
 
使用Anti-XSS也很簡單。請參考下列步驟即可:
 
第一, Anti-XSS的.DLL檔案加入參考」,或是用Nuget進行安裝。
 
第二, 後置程式碼的最上方,請加入命名空間:
      C#語法。using Microsoft.Security.Application;
      VB語法。Import Microsoft.Security.Application
 
第三, 將原本的程式加以改寫:
          想要從網址上抓取變數與值,例如 http://www.test.com/sample.aspx?Aid=123
 
C#語法:
String Name = Request.QueryString["Aid"];
修正以後,請改為:
String Name = Encoder.HtmlEncode(Request.QueryString["Aid"]);
 
VB語法:
Dim Name As String = Request.QueryString("Aid"]
修正以後,請改為:
Dim Name As String = Encoder.HtmlEncode(Request.QueryString("Aid"])
 
.NET 4.0(VS 2010)開始可以更換預設的編碼(使用外掛的、其他編碼),
請在您的 Web.Config 設定檔裡面加入這一段。讓 Anti-XSS 來保護您的網頁應用程式。
 
註解:請先把 Anti-XSS的.DLL檔案「加入參考」。
<httpRuntime encoderType="Microsoft.Security.Application.AntiXssEncoder, AntiXssLibrary"/>
 
 

 

.....................................................................................................................................

 

 
.HtmlEncode()的作法:
 
 
      
 
 
      
 
 
.NET 4.5有另外一個命名空間,內建 Anti-XSS相關的類別與方法
名字大多類似,但不可混用!
 
上面介紹的是「外掛」、需要自己動手「加入參考」Microsoft Anti-XSS Library v4.3
 
下面這個命名空間,是 .NET 4.5起 內建的
 
 
 

 

.....................................................................................................................................

 

 
下面介紹的是「外掛」、需要自己動手「加入參考」的 Microsoft Anti-XSS Library v4.3

Sanitizer的.GetSafeHtml()方法

 

如果遇見有人在HTML標籤裡面,偷偷加上JavaScript怎麼辦?

我們看看下圖的範例,竟然有人撰寫(輸入文字)把超連結<a>裡面加上onclick。

      

 

Sanitizer的 .GetSafeHtml()方法產生整個網頁

產生一個全新的網頁,不用擔心有人在表頭<head>裡面動手腳或是加入惡意指令。

      

 

 

Sanitizer的 .GetSafeHtmlFragment()方法,只過濾內容

我們常使用第三方的元件,例如 CKEditor這種線上的網頁編輯器

讓使用者張貼文章或是留言時,可以使用 HTML碼,修改文字大小與顏色,甚至可以上傳圖片……

等一下!這不就是造成 XSS攻擊的元兇嗎!

 

沒錯,所以在網頁功能上,「便利」與「安全」往往是互斥的,這種兩難是無解的。

 

 

Sanitizer的.GetSafeHtmlFragment()方法就可以用在這種場合上,

如果您的網頁程式裡面使用CKEditor這種HTML編輯器元件,由它產生的結果文字

務必透過.GetSafeHtmlFragment()方法處理、淨化之後,才能寫入資料庫!

 

......還有其他的作法,請參閱相關的資訊。

 

 

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程,遠距教學 (Web Form 49hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程,遠距教學 (ASP.NET MVC 75hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

ASP.NET MVC線上課程 第一天 免費看 (5.5小時) 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

......................................................................................................................................................

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

累積時數約 75小時...... 第一天(5.5小時)完整內容,"免費"讓您評估