Jsf XSS vulrenability in<;p:confirmDialog消息>;

Jsf XSS vulrenability in<;p:confirmDialog消息>;,jsf,primefaces,xss,confirm-dialog,Jsf,Primefaces,Xss,Confirm Dialog,摘要:属性不会转义HTML,从而打开了一个潜在的XSS攻击漏洞。我怎样才能解决它 下面的原始问题(原始标题是:XSS攻击:如何防止响应应用程序的脚本注入): 我正在使用JSF应用程序,目前我面临xss攻击的问题,我已经对它做了一些研究。但无法找到解决方案。我正在使用OWASP工具进行测试。我能够阻止请求中的xss攻击,但不能阻止响应中的xss攻击。对于请求,我使用过滤器过滤请求并给出正确的输出,但响应不是由同一个解决方案处理的。一旦应用程序控件的响应到达OWSAP,我就将脚本注入其中,并在浏览

摘要:
属性不会转义HTML,从而打开了一个潜在的XSS攻击漏洞。我怎样才能解决它

下面的原始问题(原始标题是:XSS攻击:如何防止响应应用程序的脚本注入):


我正在使用JSF应用程序,目前我面临xss攻击的问题,我已经对它做了一些研究。但无法找到解决方案。我正在使用OWASP工具进行测试。我能够阻止请求中的xss攻击,但不能阻止响应中的xss攻击。对于请求,我使用过滤器过滤请求并给出正确的输出,但响应不是由同一个解决方案处理的。一旦应用程序控件的响应到达OWSAP,我就将脚本注入其中,并在浏览器上显示它:(

Xhtml代码:

<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中的答复:

如果您在这里看到上述代码,我将插入警报确认(1);.tag

我尝试的解决方案是:

1) 用于请求而不是响应的筛选器

2) 使用转义属性

3) 标签内的内容安全策略(我使用的是mozila firefox)


提前谢谢你的帮助

  • 内容安全策略(CSP)是有用的,您应该继续使用它。但它应该在http头中,而不是html元中。而且,它只是针对bug的一种保护(就像您拥有的一样)
  • 您有一个内联脚本。您的CSP不允许内联脚本(这很好,因为内联脚本不利于安全。不要使用它们。将javascript放入javascript文件中。(如果您阅读了更多关于CSP的内容,包含“不安全”一词的关键字包含if,这是有充分理由的)
  • 生成代码:“您将要删除区域[确认(1);]。是否继续?”
message=“您将要删除区域[#{regionsBean.forDelete.regionDescription}]。是否继续?”


应该有encode regionsBean.forDelete.regionDescription。你能自己生产注射剂吗?(没有OWASP工具?

阅读三遍后,你相当复杂的问题归结为:

属性没有转义HTML,因此打开了一个潜在的XSS攻击漏洞。我如何解决它

这是一个从PrimeFaces 3.5开始的版本。
还有一个XSS漏洞,这是从PrimeFaces 5.2 RC1开始的。PrimeFaces已经作为5.3提供。因此,只需升级到最新版本,这个问题就会消失

如果您确实无法升级,以下是您的选择:

  • 确保用户控制的输入永远不会在
    中结束。只有当最终用户完全控制其值时,才可使用该选项
  • 或者,重新构建较旧版本的JAR以包含修复程序
  • 或者,提前使用JSTL函数自己转义它

    <p:confirmDialog message="#{fn:escapeXml(bean.message)}" />
    
    
    
    不要忘记在升级到至少PrimeFaces 5.2之后删除,否则它将被双重转义


要明确的是,JSF的设计目的是在所有地方都有内置XSS预防。当您在使用最新版本的JSF实现或JSF库时发现XSS漏洞,那么这只是一个bug,您无论如何都应该向JSF impl/library人员报告。另请参阅。

感谢您的回复。我正在使用OWASP工具进行测试在我的xhtml上,当我点击删除按钮时,它会显示这个确认拨号框,但在OWASP响应中显示之前,我是InjectinlineJSAlert。响应是Javascript@vinod抱歉,但是“生成HTML的代码是什么”我的意思是,您的应用程序中生成HTML的代码是什么“您将要删除区域[name\u of the \u Region]。是否继续?”谢谢。您是否可以编辑您的问题以显示生成其中内容的代码?如何在“您将要删除区域[name\u of the \u Region]”一句中插入区域名称。是否继续?"?我已经添加了所有代码,希望这会更容易理解。谢谢我编辑了我的答案,但我无法进一步帮助您。随着您的问题得到改进,我希望一些JSP人员可以帮助您寻求答案。我使用的是primefaces 3.4.2。这个问题有什么解决方法吗。正如我看到的,src/main/java/org/primefaces/component/c中有变化onfirmdialog/ConfirmDialogRenderer.java作为5.2版本中的补丁,因此我需要修改3.4.2版本的jar,并需要进行测试,为了转义,我尝试了这个替代方案,以获取消息p:confirmDialogThanks for answers update@balusC,您一直希望我们:)让我检查一下修复程序,我有权相信,如果需要将值作为实际JavaScript代码的一部分打印,则
of:escapeJS
将优于
fn:escapeXml
?@ForguesR:Use:escapeJS()。如果需要将值作为实际X(HT)ML值的一部分打印,请使用fn:escapeXml()。
<p:confirmDialog message="#{fn:escapeXml(bean.message)}" />