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雜誌,中文).....最詳細!
 
 
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 約 51hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

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

 

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

 (1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A 

 (2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I 

[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm  。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b  


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 MVC  => .NET Core MVC 線上教學  ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講   事先錄好的影片,並非上課側錄!   觀看時,有如「一對一」面對面講課