2014-02-20 27 views
4

我們在登錄頁面使用網頁控制適配器。最近我們在我們的Web應用程序上運行VeraCode。在下面的函數,我們得到了CWE80,在Web頁面(基本XSS)腳本相關的HTML標記的中和不當,就行了如何解決網頁中腳本相關HTML標記的不當中和問題(基本XSS)和錯誤消息?

rev.ErrorMessage = msg; 

以下是在WebControlAdapterExtender類的功能。

static public void WriteRegularExpressionValidator(HtmlTextWriter writer, RegularExpressionValidator rev, string className, string controlToValidate, string msg, string expression) 
     { 
      if (rev != null) 
      { 
       rev.CssClass = className; 
       rev.ControlToValidate = controlToValidate; 
       rev.ErrorMessage = msg; 
       rev.ValidationExpression = expression; 
       rev.RenderControl(writer); 
      } 
     } 

有沒有人有任何建議如何解決這個問題?

回答

4

問題是'msg'被傳遞給你的函數,但是在它被使用之前沒有中和它 - 字符串得到'原樣'使用,因此可能包含導致傷害的腳本。有一個很好的描述解釋這個,以及爲什麼它是一個問題:我沒有使用這個我自己,但我認爲ErrorMessage獲取呈現並顯示在出現錯誤。因爲如果'msg'是一個頑皮的代碼片段,這會在最終頁面上呈現,因此您將自己和用戶暴露給安全漏洞。

有提示這個小抄讀:https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

你應該能夠使用的HTMLEncode,使這個安全HttpUtility.HtmlEncode(未編碼);

rev.ErrorMessage = System.web.HttpUtility.HtmlEncode(msg); 
0

您還可以使用Apache Commons Lang3庫StringEscapeUtils。它有各種編碼字符串的方法。例如escapeXml(string),escapeHtml(string)等。

rev.ErrorMessage = StringEscapeUtils.escapeHtml(msg); 
0

函數調用包含HTTP響應分裂缺陷。將unsanitized用戶提供的輸入寫入HTTP頭允許攻擊者操縱瀏覽器呈現的HTTP響應,從而導致緩存中毒和crosssite腳本攻擊。

版本代碼

strMessage = CLASSCONSTANTNAME +的className + MESSAGENAME +消息; LOGGER.info(strMessage);

固定碼

strMessage = CLASSCONSTANTNAME +的className + MESSAGENAME +消息; LOGGER.info(ESAPI.encoder()。encodeForHTML(strMessage));

更多細節

0

您可以使用ESAPI庫來解決這個問題。

rev.ErrorMessage = ESAPI.encoder().encodeForHTML(msg); 
相關問題