日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.Net防范XSS漏洞攻击的利器HtmlSanitizer

發(fā)布時間:2023/12/4 asp.net 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.Net防范XSS漏洞攻击的利器HtmlSanitizer 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

項(xiàng)目名稱:HtmlSanitizer

NuGet安裝指令:Install-Package HtmlSanitizer

官方網(wǎng)站:https://github.com/mganss/HtmlSanitizer?

開源協(xié)議:MIT

可靠程度:更新活躍,目前已經(jīng)是3.x版,成熟靠譜。

?

1、??什么是XSS漏洞?

XSS漏洞又稱為“跨站腳本”漏洞,指的是網(wǎng)站對于用戶輸入的內(nèi)容不加甄別的原樣又輸出到了頁面中,造成惡意代碼被執(zhí)行的漏洞。

比如A用戶在發(fā)帖的時候在內(nèi)容中寫入了:<script>alert("您的賬號有危險(xiǎn),請聯(lián)系官方客服010-4444444")</script>這個電話其實(shí)不是官方的客服電話,而是A用戶擁有的詐騙電話。如果網(wǎng)站把<script>alert("您的賬號有危險(xiǎn),請聯(lián)系官方客服010-4444444")</script>原樣輸出到網(wǎng)頁中,那么其他用戶打開帖子的時候就會彈出這樣一個提示框,有的小白用戶以為是官方彈出的提示,從而被騙。當(dāng)然XSS漏洞的破壞方式還有其他的,比如寫重定向代碼把用戶重定向到詐騙網(wǎng)站、繪制詐騙的登錄表單竊取用戶賬號密碼等。

2、??如何防范XSS漏洞?

ASP.net非常貼心的幫我們做了XSS漏洞的防范,無論是ASP.Net WebForm還是ASP.Net MVC,當(dāng)用戶提交的表單中含有疑似html標(biāo)簽的內(nèi)容的時候框架直接就會報(bào)錯“從客戶端中檢測到有潛在危險(xiǎn)的值”,這樣程序員根本不用操心刻意去防范。

那么我們?yōu)槭裁催€要考慮XSS漏洞防范呢?因?yàn)樵谟幸恍﹫龊舷?還是需要允許瀏覽器提交帶有html標(biāo)簽的內(nèi)容的。比如如鵬網(wǎng)的新聞評論區(qū):


? ? ? ? ?這里允許用戶發(fā)鏈接、發(fā)圖片、設(shè)置字體顏色、畫table等復(fù)雜的格式控制,這些內(nèi)容都是Html格式表達(dá)最方便。有的項(xiàng)目中是使用UBBMarkDown等轉(zhuǎn)義的方案,但是都沒有允許用戶寫html最強(qiáng)大、靈活。現(xiàn)在主流的Html在線編輯器,比如UEditorKindEditor等也都是輸出成html內(nèi)容。因此必須允許我們把這些html內(nèi)容提交給服務(wù)器。

3、??如何禁用ASP.NetValidateRequest

要“允許我們把這些html內(nèi)容提交給服務(wù)器”,就要禁用“自動XSS檢測”,也就是關(guān)閉ValidateRequest。無論是ASP.Net WebForm,還是ASP.Net MVC中,都有關(guān)掉.Net的“自動XSS檢測”的方法。

由于ASP.Net MVC的必然崛起,ASP.Net WebForm業(yè)內(nèi)不推薦使用了,在如鵬網(wǎng)的.Net培訓(xùn)課程中也把ASP.Net WebForm刪掉了,因此這里就不再浪費(fèi)時間介紹如何在ASP.Net WebForm禁用“自動XSS檢測”,感興趣的可以搜索一下“ASP.Net WebForm?禁用ValidateRequest”。

下面我只介紹在ASP.Net MVC中如何禁用ValidateRequest,很簡單,只要在Action方法上標(biāo)注[ValidateInput(false)]即可。比如

[ValidateInput(false)]

public ActionResult Test()

{

}

4、??如何避免XSS漏洞?

一旦禁用“自動XSS檢測”,咱們的系統(tǒng)又陷入了危險(xiǎn)之中。如何即允許用戶提交html,又避免用戶提交有潛在危險(xiǎn)的html代碼呢?HtmlSanitizer給出了很好的解決方案:設(shè)置不危險(xiǎn)的“標(biāo)簽、屬性”白名單,把所有不在白名單中的“標(biāo)簽、屬性”全部干掉。

?????????下面是例子代碼:

var sanitizer = new HtmlSanitizer();

var html = @"<SCRIPT>alert('xss')</script><div οnlοad=""alert('xss')"""

+ @"style=""background-color: test"">Test<img src=""test.gif"""

+ @"style=""background-image: url(javascript:alert('xss')); margin: 10px""></div>";

html = sanitizer.Sanitize(html);

?????????輸出一下html你就會發(fā)現(xiàn)它變成了:

<div style="background-color: test">Test<img src="test.gif" style="margin: 10px"></div>

?

?????????很顯然,那些危險(xiǎn)的<script>標(biāo)簽、onload事件都被刪除掉了,甚至這種潛在的危險(xiǎn)都能過濾掉:background-image: url(javascript:alert('xss'))

?????????而無害的標(biāo)簽、樣式、屬性則被保留了下來。

5、??細(xì)節(jié)問題:

1)??form表單也會引起潛在的危險(xiǎn),但是HtmlSanitizer默認(rèn)是允許form標(biāo)簽的,因此要禁用掉,只要執(zhí)行sanitizer.AllowedTags.Remove("form");form表單從“標(biāo)簽白名單”中移除即可。其他你不想允許的標(biāo)簽也可以通過這種方法移除。具體有哪些白名單可以從HtmlSanitizer的官網(wǎng)看到。HtmlSanitizer類的AllowedAttributesAllowedCssPropertiesAllowedTags分別是“標(biāo)簽屬性白名單”、“CSS屬性白名單”、“標(biāo)簽白名單”。

2)??HtmlSanitizer會對html做正規(guī)化修正以保證更符合Html標(biāo)準(zhǔn),因此并不會原樣輸出,比如4 < 5這種不規(guī)范的寫法會被處理成4 &lt; 5,<SPAN>test</p>這種不規(guī)范的寫法會被處理成<span>test<p></p></span>

3)??HtmlSanitizer依賴于AngleSharp這個開源庫做html的解析,因此如果用的時候存在一些bug,可以嘗試升級一下AngleSharp庫;

原文地址:http://bbs.rupeng.com/Post/Index/4084


.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注

總結(jié)

以上是生活随笔為你收集整理的ASP.Net防范XSS漏洞攻击的利器HtmlSanitizer的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。