上周日讲课,提到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小时)*** 

************************************************************(欢迎索取,免费申请)*****

相关文章