最近寫一個ASP.NET WebForm的網頁,允許使用者在TextBox輸入各種文字,也包括Html(當然惡意的使用者可能會使用SQL Injection 或Javascript),然後存到資料庫,網頁執行後,會出現「ASP.NET 具有潛在危險 request.form 的值...」,我是透過在頁面的Page指示詞中加入 validateRequest="False" 來關閉這個功能,但是我想不太透,這個所謂的潛在危險是發生於SQL 的INSERT、UPDATE或是將來把資料Disapaly出來的時候?
若有風險可否舉一實例讓我能了解?
那個只要文字內容包含HTML就會被擋下來~
但如果你那頁有用HTML編輯器的功能,就要關掉這阻擋訊息
網頁編輯器
https://www.google.com/search?q=HTML%E7%B7%A8%E8%BC%AF%E5%99%A8
但我都會驗證Request來源的值~是數字就是數字~是文字就刪除單引號(HTML編輯器來源的話~例外不刪除)
.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" />
這裡有實際案例
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.不建議使用黑名單(可能因過濾不乾淨而讓攻擊者規避規則;在跨站指令碼攻擊中,若想透過黑名單式的過濾方式,是行不通的。因為改寫形式太多)
單純是html的tag不會危害,但是只要有script這種字眼就禁止,是不是就可以防止了?
html tag也可能有危害比方內嵌iframe然後被塞其他頁面廣告破壞本來的頁面版型之類的
沒那麼簡單。
上面也提到,這些是需要正面表列的,也就是用白名單方式去開放沒問題的tag和attr。
有些attr像 src、onclick 之類的也會有類似的問題,因為要防止的太多,不能只簡單過濾script標簽。
建議是去找防XSS的專門套件,python我是用 mozilla/bleach,JS有個JSXSS,C#我就不知道了