2015-12-24 32 views
1

摘要:<p:confirmDialog message>屬性不會轉義HTML,因此會打開潛在的XSS攻擊漏洞。我該如何解決它?<p:confirmDialog消息>中的XSS vulrenability>

下面

原來的問題(原標題爲:XSS攻擊:如何防止腳本注入應用的響應):


我的工作目前我面臨XSS攻擊問題JSF應用程序,我有對它做了幾項研究。但無法找到解決方案。我正在使用OWASP工具進行測試。我能夠在請求中阻止xss攻擊,但不能響應。對於請求我使用了篩選器來篩選請求並給出正確的輸出,但是響應不是由相同的解決方案處理的。一旦響應來自應用控制轉到OWSAP那麼我注入腳本內部和它得到顯示在瀏覽器:(

XHTML代碼:在OWSAP

<p:panel header="Regions"> 
      <p:dataTable id="regionsTable" 
       var="region" 
       value="#{regionsBean.regions}" 
       rowKey="#{region.id}" 
       selectionMode="single" 
       selection="#{regionsBean.selectedRegion}"> 

       <p:column styleClass="colID"> 
        <f:facet name="header">ID</f:facet> 
        <h:outputText value="#{region.id}" /> 
       </p:column> 

       <p:column> 
        <f:facet name="header">Region</f:facet> 
        <h:outputText value="#{region.regionDescription}" /> 
       </p:column> 


       <p:column styleClass="colActionRegions"> 
        <f:facet name="header">Action</f:facet> 
        <p:commandLink id="deleteRegionLnk" 
         oncomplete="deleteRegionConfirm.show()" update=":regionForm:dltDlg"> 
         <p:graphicImage value="/resources/images/delete1616.png"/> 
         <f:setPropertyActionListener value="#{region}" target="#{regionsBean.forDelete}" /> 
        </p:commandLink> 
        <p:tooltip id="toolTipDelete" for="deleteRegionLnk" value="Delete" showEffect="fade" hideEffect="fade" /> 
       </p:column> 
    </p:dataTable> 
     </p:panel> 

     <p:confirmDialog id="dltDlg" message="You are about to delete the Region [#{regionsBean.forDelete.regionDescription}]. Proceed?" header="Delete Region" severity="alert" widgetVar="deleteRegionConfirm"> 

      <p:commandButton id="confirm" value="Yes" styleClass="iot-button" update="regionsTable,growl" oncomplete="deleteRegionConfirm.hide()" actionListener="#{regionsBean.delete}" style="color: #FFF"/> 
      <p:commandButton id="decline" value="Cancel" styleClass="iot-button" onclick="deleteRegionConfirm.hide()" type="button" style="color: #FFF"/> 

     </p:confirmDialog> 

響應:

OWSAP response modification in red box 如果您在此處看到上面的代碼,我將插入警報< .script> confirm(1); < ./script> .tag。

我試過的解決方案:

1)正在處理請求而不是響應的過濾器。

2)使用escape屬性標記內

3)內容安全策略(我使用mozila火狐)

<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://apis.google.com;" /> 

感謝您的幫助提前。

回答

3

讀三次後,你相當令人費解的問題歸結爲:

<p:confirmDialog message>屬性不逃避HTML,特此開設一個潛在的XSS攻擊漏洞。我該如何解決它?

這是一個known issue自PrimeFaces 3.5以來已經是fixed。此外,<p:confirmDialog header>具有also XSS vulrenability,自PrimeFaces 5.2 RC1以來只有fixed。 PrimeFaces是currently已經可以作爲5.3。所以,只需升級到最新版本,這個問題就會消失。

如果你真的不能升級,下面是你的選擇:

  • 確保用戶控制輸入從未在<p:confirmDialog message>結束。當最終用戶完全控制它的價值時,這只是很難理解的。
  • 或者,重新構建舊版本化的JAR以包含修復程序。
  • 或者,事先使用JSTL #{fn:escapeXml()}函數自己逃脫。

    <p:confirmDialog message="#{fn:escapeXml(bean.message)}" /> 
    

    不要忘記在升級到PrimeFaces 5.2之後刪除,否則會被雙重轉義。

要清楚的是,JSF旨在爲所有地方提供內置的XSS預防。如果您在使用最新版本的JSF實現或JSF庫時發現了XSS漏洞,那麼這只是一個錯誤,您應該儘可能向JSF impl/library人員報告。另見CSRF, XSS and SQL Injection attack prevention in JSF

+0

感謝您的迴應。我正在使用primefaces 3.4.2有沒有解決這個問題的方法。因爲我看到src/main/java/org/primefaces/component/confirmdialog/ConfirmDialogRenderer.java中有修改,所以我需要修改3.4.2的jar並需要測試 – vinod

+0

並嘗試轉義這種替代的 \t \t \t \t \t \t \t \t \t的 \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t爲的消息p:confirmDialog – vinod

+0

感謝您的回答更新@balusC你總是希望我們:)讓我檢查修復 – vinod

0
  • Content-Security-Policy(CSP)非常有用,您應該繼續使用它。但它應該在http標題中,而不是在html元素中。而且,它只是防止bug的保護(就像你所擁有的那樣)。
  • 你有一個內聯腳本。你的CSP不允許使用內聯腳本(因爲內聯腳本不利於安全性,所以不要使用它們)。將javascript放在javascript文件中(如果你閱讀了更多關於csp的知識,那麼包含'u​​nsafe'原因)
  • 碼生成: 「您將要刪除的區域[確認(1);]繼續。?」

消息=「您將要刪除的區域[#{regionsBean .forDelete.regionDescription}]繼續?「

應該編碼regionsBean.forDelete.regionDescription。你能夠給自己注射? (?沒有OWASP工具)

+0

感謝您的回覆。我正在使用OWASP工具進行測試,打開我的xhtml我正在使用當我點擊刪除按鈕它顯示這個確認dialouge框但在顯示OWASP響應之前我注入內聯JS警報。和迴應是在Javascript – vinod

+0

@vinod對不起,但「什麼是代碼生成的HTML」我的意思是,你的應用程序中的代碼是什麼產生「你將要刪除區域[name_of_the_region]。繼續? – Tom

+0

我編輯了評論plz檢查 – vinod

相關問題