String safeOutput = ESAPI.encoder().encodeForHTML(request.getParameter("temp"));
以上不起作用,它不驗證。 (插入所有需要的罐子並導入所有文件)。那麼我們可以直接使用輸出驗證嗎?我們可以做輸出驗證而無需在esapi中進行輸入驗證嗎?
String safeOutput = ESAPI.encoder().encodeForHTML(request.getParameter("temp"));
以上不起作用,它不驗證。 (插入所有需要的罐子並導入所有文件)。那麼我們可以直接使用輸出驗證嗎?我們可以做輸出驗證而無需在esapi中進行輸入驗證嗎?
驗證輸入
我會用Hibernate驗證的@SafeHtml
註釋:
class MyEntity {
@SafeHtml
private String title;
...
}
不編碼輸入,驗證它。您想要阻止數據庫中的XSS或可能的XSS。
您可以驗證控制器和/或存儲庫中的輸入。
編碼輸出
使用OWASP的Java Encoder Project。在JSP中,你可以這樣做:
<e:forHtml value="${attr}" />
是否有JPA規範或Hibernate獨有? – avgvstvs
Hibernate Validator是Bean Validation 1.1的參考實現。 –
你貼的代碼是不是驗證代碼。這是輸出轉義。如果您想驗證的一段代碼,您要使用的許多ESAPI.validator().getValidInput()
方法,在結合validation.properties.
同樣適用,如果你的想法是做輸出驗證一個,不這樣做。原則上這意味着你會在應用程序中接受惡意數據,然後在輸出時只檢查它的惡意。不要讓它進入你的應用程序!退出輸出。 總是根據上下文逃避輸出!
This answer給出了四個如何考慮輸出轉義的例子 - 不要忘記你的上下文!接受的答案也指導您提供更完整的解決方案來處理XSS。
你會得到什麼錯誤信息?它如何「不驗證」? – gustafc