2013-11-15 126 views
1

我有兩個字段:輸入和輸出。在輸入我正在寫html代碼,按下按鈕,並看到輸出字段中呈現的代碼。在JSF中呈現HTML內容

<h:form id="displayForm"> 
     <p:commandButton value="Execute" actionListener="#{screenController.executeCode}" update="displayForm:output"/> 
     <h:inputTextarea value="#{screenModel.input}" rows="20" cols="165"/> 
     <br/> 
     <h:outputText id="output" value="#{screenModel.output}" escape="false"/> 
    </h:form> 

但是,當我寫

<script> 
document.write("1") 
</script> 

所有頁面被渲染。我完全不知道java腳本,但我有想法。我可以在一些代碼上替換文檔,而不是隻在「輸出」字段上進行渲染。我如何做到這一點?

回答

1

將其打印在您通過顯示的獨立頁面中。

無論採取何種方法,將用戶控制的輸入重新顯示爲未轉義的HTML會在您的服務器上打開一個空洞的XSS attack洞。您不希望最終用戶能夠在您的服務器上完全失控地運行JavaScript。使用諸如Jsoup之類的HTML清理工清理所有潛在的惡意HTML標記和屬性。

+0

是的,但如何設置值的HTML頁面的iframe? –

+0

您可以使用flash作用域或傳遞標識符作爲請求參數。 – BalusC