반응형

납품한 스프링 프로젝트 중 오류가 발생하는 이슈가 있었습니다.

 

저장을 할때 마다 오류가 발생한다는 메시지가 출력되었고, 소스를 분석하는데, 꽤 오랜시간을 소요되었습니다. XSS악성 스크립트를 막고자 인터셉터 설정을 하였고 모든 파라미터를 확인해서 특정 키워드가 존재하면 동작을 멈추게 하도록 설정해뒀는데, 해당 키워드에서 계속 걸려서 진행이 불가한 상황이였습니다.

 

해당 스크립트에 걸려도 괜찮고 저장할 수 있는 로직을 구성하기 위해 자바스크립트단에서 문자열데이터를 utf8 바이트 배열로 변환하고 컨트롤러단에서는 바이트 배열을 바이트로 형변환 후 new String메소드를 통해 문자열로 변환시키는 방식으로 해결하였습니다.

 

문자열데이터를 바이트배열로 변경하고 자바에서 바이트배열을 문자열로 변경하기

 

javascript단

function stringToUtf8Bytes(text){
    var result = [] ;
    if(text != null){
    	for (i = 0; i<text.length; i++) {
            var c = text.charCodeAt(i);
            if (c <= 0x7f) {
                result.push(c);
            } else if (c <= 0x07ff) {
                result.push(((c >> 6) & 0x1F) | 0xC0);
                result.push((c & 0x3F) | 0x80);
            } else {
                result.push(((c >> 12) & 0x0F) | 0xE0);
                result.push(((c >> 6) & 0x3F) | 0x80);
                result.push((c & 0x3F) | 0x80);
            }
        }
    }
    return result;
}

위의 함수 파라미터에 형변환을 할 문자열을 넣으면 utf8 바이트 배열로 변환됩니다.

변환 된 데이터를 컨트롤러에 넘기시면 됩니다. (ajax또는 form태그 데이터)

 

java단

@ResponseBody
@RequestMapping(value="addMember", method = RequestMethod.POST)
public String addMember(HttpServletRequest request, HttpServletResponse response) {
    String email = request.getParameter("email");
    //변환 시작
    String[] tmpEmailArr = email != null ? email.split(",") : null;
    String convEMail = "";
    if(tmpEmailArr != null) {
    	byte[] bta = new byte[tmpEmailArr.length];
    	for(int i=0;i<tmpEmailArr.length;i++) {
    		bta[i] = Byte.parseByte(tmpEmailArr[i]);
    	}
    	convEMail = new String(bta, StandardCharsets.UTF_8);
    }
    email = convEMail;
    //변환 완료
    
    ...
    //이후 동작 처리

파라미터로 받은 데이터는 문자열 덩어리로 들어와 있을텐데 (ex: 100, 105, 205, 88, 77 ...)

,을 통해 split처리 후 각각 데이터를 byte배열에 담아준 후 new String메소드를 통해 문자열로 파싱해줍니다.

 

 

바이트배열을 문자열로 변경

test@naver.com이라는 문자열을 자바스크립트단에서 변환하여

116, 101, 115, 116, 64, 110, 97, 118, 101, 114, 46, 99, 111, 109로 변환했고

 

자바에서 해당 데이터를 받아서 파싱하는것을 볼 수 있습니다.

반응형