iT邦幫忙

0

「ASP.NET 具有潛在危險 request.form 的值」...有無危險實例可參

  • 分享至 

  • xImage

最近寫一個ASP.NET WebForm的網頁,允許使用者在TextBox輸入各種文字,也包括Html(當然惡意的使用者可能會使用SQL Injection 或Javascript),然後存到資料庫,網頁執行後,會出現「ASP.NET 具有潛在危險 request.form 的值...」,我是透過在頁面的Page指示詞中加入 validateRequest="False" 來關閉這個功能,但是我想不太透,這個所謂的潛在危險是發生於SQL 的INSERT、UPDATE或是將來把資料Disapaly出來的時候?
若有風險可否舉一實例讓我能了解?

froce iT邦大師 1 級 ‧ 2021-11-05 07:22:31 檢舉
去查 XSS 你就知道了。
XSS 通常是Display時,惡意攻擊者會插入惡意程式碼,造成使用者危害。

通常要讓使用者插入HTML的話,後端得用一些 XSS 檢查的函式庫去過濾掉一些危險的tag或attr如:
script
onclick
之類的。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
純真的人
iT邦大師 1 級 ‧ 2021-11-05 07:23:55

那個只要文字內容包含HTML就會被擋下來~
但如果你那頁有用HTML編輯器的功能,就要關掉這阻擋訊息
網頁編輯器
https://www.google.com/search?q=HTML%E7%B7%A8%E8%BC%AF%E5%99%A8

參考如何關掉~
https://smiletrip.pixnet.net/blog/post/341872269-%5B.net%5D%E8%A7%A3%E6%B1%BA%E5%85%B7%E6%9C%89%E6%BD%9B%E5%9C%A8%E5%8D%B1%E9%9A%AArequest.form-%E7%9A%84%E5%80%BC%E5%B7%B2%E5%BE%9E%E7%94%A8

但我都會驗證Request來源的值~是數字就是數字~是文字就刪除單引號(HTML編輯器來源的話~例外不刪除)

1
Samuel
iT邦好手 1 級 ‧ 2021-11-05 09:07:03

.net webform xss solution
預設會自動做XSS相關驗證但可能會讓你有些程式功能沒辦法啟用
通常會關閉但也要注意自己去做類似html encode的防範跟輸入的查檢(front-side,server-side)

可以針對單頁page-level做處理
<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest = "false"

也可以針對整個application做處理到web.config設置
<pages validateRequest ="false" />

Ref:
https://forums.asp.net/t/2093798.aspx?A+potentially+dangerous+Request+Form+value+was+detected+from+the+client+txtText+doctype+html+html+

這裡有實際案例
https://owasp.org/www-project-top-ten/2017/A7_2017-Cross-Site_Scripting_(XSS)

常見的web風險
https://coolmandiary.blogspot.com/2021/02/owasp-top-10.html

Cross Site Scripting(XSS) :跨站腳本攻擊

為了不要跟 "CSS" 混淆,故簡稱XSS。
當應用程式未將使用者提供的資料先驗證或進行內容編碼,就直接將資料傳輸到網路瀏覽器,即可能發生XSS問題。XSS能讓攻擊者直接在受害者的網路瀏覽器上執行Script,攻擊者便可以劫持使用者Sessions、或竄改網站內容等。通常是透過HTML/JavaScript這類不在伺服器端執行、而在使用者端的瀏覽器執行之方式攻擊,讓惡意程式碼得以執行。可用來竊取用戶的cookie,甚至於冒用使用者的身份。像是網路銀行、電子郵件、部落格或其他需要有帳號才能進入的網站。

造成的風險:
1.加密連線可能失效 – 駭客偷取使用者的cookie,取得使用者個人資料
2.駭客可假冒使用者身分,存取具身分控管機制 的網站
3.將使用者瀏覽器導向釣魚網站,以騙取帳號密碼等個人資訊 或者導向惡意網站,安裝惡意後門程式

攻擊手法:
可以分為兩種:
1.Reflected Attack
常設計在使用者按下時觸發(可能來自釣魚郵件)
常出現於網站的搜尋欄、使用登入介面,用來竊取 Cookie 或是釣魚欺騙
第一步會先找出目標想要駭入的網站中XSS潛在漏洞,
再製造一個惡意的URL 連結。這個連結是網站中的某個功能。
該功能會接收使用者端提供的資料,並回應到使用者端的畫面,如資料檢索功能。

2.Persistent Attack
另一種是單純的瀏覽網頁,且該網頁中已植入惡意的語法
駭客已先將惡意腳本上傳、儲存在有漏洞的server, 只要受害者瀏覽到相關頁面就會執行惡意程式,當使用者造訪被感染的網頁,會自動執行攻擊。

改善方案:
1.請求與回應接要驗證是否有非法字元(除了Client端坐查檢驗證之外,Server端也要加入)
2.建議使用白名單(比如只允許數值就限定數字內容)
3.不建議使用黑名單(可能因過濾不乾淨而讓攻擊者規避規則;在跨站指令碼攻擊中,若想透過黑名單式的過濾方式,是行不通的。因為改寫形式太多)

看更多先前的回應...收起先前的回應...
stockoko iT邦新手 5 級 ‧ 2021-11-05 12:29:33 檢舉

單純是html的tag不會危害,但是只要有script這種字眼就禁止,是不是就可以防止了?

Samuel iT邦好手 1 級 ‧ 2021-11-05 12:59:57 檢舉

html tag也可能有危害比方內嵌iframe然後被塞其他頁面廣告破壞本來的頁面版型之類的

froce iT邦大師 1 級 ‧ 2021-11-05 13:05:38 檢舉

沒那麼簡單。
上面也提到,這些是需要正面表列的,也就是用白名單方式去開放沒問題的tag和attr。
有些attr像 src、onclick 之類的也會有類似的問題,因為要防止的太多,不能只簡單過濾script標簽。
建議是去找防XSS的專門套件,python我是用 mozilla/bleach,JS有個JSXSS,C#我就不知道了

Samuel iT邦好手 1 級 ‧ 2021-11-05 13:39:52 檢舉

可參考這個之前有人問過了

https://ithelp.ithome.com.tw/questions/10205787

froce iT邦大師 1 級 ‧ 2021-11-05 20:39:34 檢舉

補充說明:
上面提到的方法(html encode)是用在你的output不需要還原成 HTML 的時候,一些危險的符號會被轉換,然後直接顯示在結果。例如:

<script>

會被轉成

&lt;script&gt;

防XSS的套件是用在你的output還需要還原成 HTML 的時候。
一般來說套件會幫你把你的字串過濾掉不在白名單的 tag 和 attr。

stockoko iT邦新手 5 級 ‧ 2021-11-06 07:49:23 檢舉

謝謝,這樣的說明很清楚,我是希望使用者如果懂html和CSS,可以自己設定未來顯示的樣子,所以用encode和decode應該是可以避免一些麻煩。但是或是()這種應該還是要禁止..我自己想的

我要發表回答

立即登入回答