Jsf 带换行符和XSS的Primefaces confirmDialog

Jsf 带换行符和XSS的Primefaces confirmDialog,jsf,primefaces,Jsf,Primefaces,我有一个命令按钮,带有使用primefaces的确认操作: <p:commandButton value="Test" rendered="..." action="#{controller.actionMethod(param)}"> <p:confirm header="Confirmation" escape="false" message="This is a really long message test &lt;br/&gt

我有一个命令按钮,带有使用primefaces的确认操作:

<p:commandButton value="Test"
    rendered="..."
    action="#{controller.actionMethod(param)}">
    <p:confirm header="Confirmation" escape="false" message="This is a really long message test &lt;br/&gt; 
        This is a really long message test."/>
</p:commandButton>

我已经了解到关闭escape是一个潜在的XSS攻击漏洞,因此我尝试在不使用消息中的换行符的情况下修复此问题(并且允许escape=true)

confirmDialog是全局的:

<p:confirmDialog global="true" showEffect="fade" hideEffect="fade">
    <p:commandButton value="Yes"
        type="button" styleClass="ui-confirmdialog-yes" icon="ui-button-icon-left ui-icon ui-c ui-icon-check" />
    <p:commandButton value="No"
        type="button" styleClass="ui-confirmdialog-no" icon="ui-button-icon-left ui-icon ui-c ui-icon-close" />
</p:confirmDialog>   


我尝试过使用线前包装的造型,但我没有运气。我在追求一个非问题吗?这实际上是一个XSS漏洞吗?

在消息中引入换行符的更好方法是将facet用作。这样你就可以摆脱XSS的麻烦了

<p:confirmDialog header="Confirmation">
    <f:facet name="message">
        Are you sure you want to continue?<br/>Yes or no?
    </f:facet>
</p:confirmDialog> 

是否确实要继续?
是或否?

不过,如果您想这样做,假设您在多次转义属性中使用质数面7,则不会对XSS发出任何警告。当我从用户那里获得文本输入时,我更担心XSS,而不是按钮输入。

这是否回答了您的问题?与@JasperdeVries一起使用escape=“false”回答是可以的,只要您知道将放入该框中的内容。如果是用户输入的数据,您永远不会希望使用escape=“false”,但如果您始终是内容的作者,则可以使用escape=“false”。@Melloware-这些对话框完全由开发人员控制,不需要输入任何内容。使用escape=“false”则无需担心.XSS在未扫描的输出中使用来自“不受信任的源”的输入时是危险的。因此,在这两种方法中(=来自重复的Q),都存在与Q中的代码一样小的风险