0
내 HTML에서 모든 입력 태그의 내용을 필터링하고 싶습니다. 지금 안티 스팸 필터를 사용하고 있습니다. 필터는 입력 값 대신에 완전한 HTML 컨텐트를 필터링합니다. 나는 여기서 제공되는 구현을 사용하고Spring MVS에서 AntiSamy를 사용한 XSS 보안
: 내가 내용을 스캔이 코드 조각을 사용하고있는 doFilter 방법 내부
을
내가 원하는 것은 약 반면HttpServletResponseInvocationHandler invocationHandler = httpResponseInvocationHandlerFactory.build((HttpServletResponse) response);
CleanResults cleanResults = antiSamy.scan(invocationHandler.getContents(), policy);
:
CleanResults cleanResults = antiSamy.scan(request.getParameter("input"), policy);
입력 필드가 필터링됩니다. 나는 기본적으로 AntiSamy가 제공하는 모든 정책 파일에 그것을 시도
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (response instanceof HttpServletResponse) {
HttpServletResponseInvocationHandler invocationHandler = httpResponseInvocationHandlerFactory.build((HttpServletResponse) response);
HttpServletResponse proxiedResponse = httpResponseProxyFactory.build(invocationHandler);
chain.doFilter(request, proxiedResponse);
if ("text/html;charset=UTF-8".equals(proxiedResponse.getContentType())) {
try {
Policy policy = policyFileLoader.load(policyFile);
antiSamy.setInputEncoding(inputEncoding);
antiSamy.setOutputEncoding(outputEncoding);
CleanResults cleanResults = antiSamy.scan(invocationHandler.getContents(), policy);
log.info("Number of Errors: " + cleanResults.getNumberOfErrors());
if (log.isDebugEnabled()) {
log.debug("Errors found: ");
List errors = cleanResults.getErrorMessages();
for (int i = 0; i < errors.size(); i++) {
log.debug("\t" + (i + 1) + ". " + errors.get(i));
}
}
log.info("Scan time (in seconds): " + cleanResults.getScanTime());
response.getOutputStream().write(cleanResults.getCleanHTML().getBytes());
} catch (ScanException e) {
log.error(GENERIC_ERROR, e);
} catch (PolicyException e) {
log.error(GENERIC_ERROR, e);
}
} else {
response.getOutputStream().write(invocationHandler.getBytes());
}
} else {
chain.doFilter(request, response);
}
}
: 여기
전체 doFilter 방법이다.이것에 대해 도움이 될 수 있다면 좋을 것입니다.