close

上週日講課,提到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

寫信給我--  mis2000lab (at) yahoo.com.台灣  或是  school (at) mis2000lab.net

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

................   Google+   https://plus.google.com/100202398389206570368/posts ........

................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ

*********************************************************************************************

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

************************************************************(歡迎索取,免費申請)*****

arrow
arrow
    文章標籤
    XSS .NET
    全站熱搜

    MIS2000 Lab 發表在 痞客邦 留言(0) 人氣()