我有一些源代碼中存在一些跨站點腳本漏洞。當瀏覽器將數據發送到執行服務器端JavaScript和傳統ASP(IIS 7.0)的服務器時,不會發生輸入驗證。Javascript覆蓋安全性(XSS)的Request.Form(「foo」)
我的問題是,有沒有辦法覆蓋Request.Form("foo")
對象/方法,以便我也可以調用一個清理功能,並擺脫禁止的JS/HTML?我不想在每個文件的每個文件上找到並替換Request.Form
被調用。我希望有更優雅的東西。
任何建議表示讚賞。
我有一些源代碼中存在一些跨站點腳本漏洞。當瀏覽器將數據發送到執行服務器端JavaScript和傳統ASP(IIS 7.0)的服務器時,不會發生輸入驗證。Javascript覆蓋安全性(XSS)的Request.Form(「foo」)
我的問題是,有沒有辦法覆蓋Request.Form("foo")
對象/方法,以便我也可以調用一個清理功能,並擺脫禁止的JS/HTML?我不想在每個文件的每個文件上找到並替換Request.Form
被調用。我希望有更優雅的東西。
任何建議表示讚賞。
我不認爲你可以改變Request.Form
成員。
你可以做什麼,作爲一個部分解決方案,是創建將每個頁面上首次運行(例如,使用include
指令),它會遍歷Request.Form
,Request.QueryString
等代碼,如果發現可疑代碼它終止代碼執行(Response.End
)。這個解決方案是部分的,因爲它沒有真正處理輸入,它只是在發現可疑文本時放棄執行。
另一種選擇:創建一個數組,平行於Request.Form
。使用與Request.Form中相同的成員填充此數組,但這次已過濾。然後,快速在您的整個代碼庫中查找並替換,並將Request.Form
更改爲您的自定義數組變量。
OP不想使用查找/替換,我認爲這是一個更好的選擇。我喜歡你對包含在頁面頂部的'Request.Form'循環的建議 – 2012-04-24 20:48:59
有一種方法可以用另一個COM對象代替整個Request
對象,但它是一個瘋狂的解決方案,它仍然要求所有使用Form
的ASP文件都包含一個公共頂部包含文件。無法在應用程序級別全局替換Request
對象或其成員之一。
對於這個問題的正確解決方案,您的聲明「不想在每個單獨的文件上查找並替換每個文件」,儘管這樣做是執行這樣的全局替換。
儘管存在多少.asp文件,但成本只是敲一個簡單的程序來打開文件夾樹中的每個ASP文件,添加一個包含行並替換Request.Form
。
你嘗試過'var oldRequestForm = Request.Form; Request.Form = function(param){return yourSanitization(oldRequestForm(param))}' – 2012-04-24 16:48:34
我剛剛做到了。沒有工作。 – 2012-04-24 17:01:09
@JuanMendes不,不可能。嘗試_search_和_replace all_而不是_find_和_replace_。 – 2012-04-24 20:24:39