2014-10-15 8 views
1

레거시 코드로 인해 Spring 컨트롤러에 포함 된 모든 객체에 포함 된 모든 문자열을 삭제 (특수 문자 또는 위험한 HTML 제거)하는 방법을 구현해야합니다. HandlerMethodArgumentResolver 내 자신의 구현을 쓴, 그래서 어떤 매개 변수를 가로 채서 컨트롤러에 보내기 전에 개체를 sanitize 수 있습니다. 또한 jsr-303 및 reflection을 사용하는 bean, 배열, 콜렉션, 맵 및 물론 단일 문자열을 사용하여 가장 일반적인 Java "유형"을 살균하는 유틸리티 클래스를 작성했습니다.java - 개체 구조를 반복하거나 이동하는 방법은 무엇입니까? 예 : 모든 문자열을 살균하기 위해서

public class ObjectSanitizer { 
public static Object sanitizeObject(Object object) 
      throws EsapiValidationException { 
     Object result = getDefaultResult(object); 
     if (object instanceof String) 
      result = santitizeString((String) object); 
     else { 
      if (object != null) { 
       if (object instanceof Collection<?>) { 
        result = sanitizeCollection((Collection<?>) object); 
       } else if (object instanceof Map<?,?>) { 
        result = santizeMap(object); 
       } else if (object.getClass().isArray()) { 
        result = santizeArray(object); 
       } else { 
        result = sanitizeObjectWithJSR(object); 
       } 
      } 
     } 
     return result; 
    } ... Concrete sanitizers ... } 

제 질문은 : 올바른 방법 (기본 제공 기능, API, 디자인 패턴)이 있습니까? 모든 자바 전문가와 초보자가 나 같은 것을 미리 감사드립니다.

+0

문자열을 살균하는 것은 무엇을 의미합니까? – SamTebbs33

+0

@ SamTebbs33 우리는 모든 입력 문자열에서 위험한 HTML 태그와 특수 문자를 제거하려고합니다. 서버 쪽 – Nino

답변

0

제한된 개체 유형 집합이 없어도 모든 경우에 위생적으로 처리 할 수 ​​없습니다. Object 유형 세트가 제한되어 있다고 가정하면 (예 : String, Map, Collection) 각 유형에 대해 메소드를 삭제할 수 있어야합니다. 일관된 인터페이스 (예 : sanitize() 메서드가있는 ISanitizable)를 제공 한 다음 실제로지도의 유형이 더 많을수록 더 많은지도와 컬렉션을 가질 수 있으므로 재귀 적으로 호출해야합니다.). 또한 객체를 수정하면 (예 : 기존 객체를 대체 할 새 객체를 만드는 경우) 바람직하지 않은 결과가 발생할 수 있으므로주의 깊게 테스트해야합니다. 따라서 실수로 다른 객체를 수정하지 않아도됩니다. 코드베이스.

+0

Thanks @Dororo! 사실, 내 API의 테스트 패키지가 주요 클래스보다 훨씬 클 것이라고 생각합니다. – Nino

0

Javaland에서 String 객체를 sanitize하는 대신 응답에 쓰여지기 전에 텍스트 출력을 sanitize 할 수 있습니까?

이것이 자바 필터 (스프링 특정 기능 아님)를 사용하여 수행 할 수있는 좋은 예라고 생각합니다. 분명히 집에 자신을 위생적으로 나타내는 텍스트를 굴리지 말라. 거기에 도서관을 많이 만들어야한다.

http://www.javacodegeeks.com/2012/07/anti-cross-site-scripting-xss-filter.html

+0

안녕하세요 @ 재제피, 감사합니다! 또한 필터를 사용하려고했지만 요청 본문 내부의 JSON 객체에 문제가 발생했습니다. – Nino

+0

필터를 사용하려고 할 때 문제가 발생한다고하면 무엇을 의미합니까? 나쁜 방식으로 데이터를 변조하고 있습니까? 요청 본문을 성공적으로 조작 할 수 없습니까? – Jazzepi