반응형
납품한 스프링 프로젝트 중 오류가 발생하는 이슈가 있었습니다.
저장을 할때 마다 오류가 발생한다는 메시지가 출력되었고, 소스를 분석하는데, 꽤 오랜시간을 소요되었습니다. 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로 변환했고
자바에서 해당 데이터를 받아서 파싱하는것을 볼 수 있습니다.
반응형
'JAVA' 카테고리의 다른 글
JAVA - ActiveMQ 연결 예제 (2) | 2020.03.13 |
---|---|
JAVA - 콜백함수 구현하기(Interface, Functional Interface 활용) (0) | 2020.03.12 |
JAVA8 - 함수적 인터페이스 Function (0) | 2020.02.18 |
JAVA8 - Stream 사용하기 - 3(최종연산, count, reduce 등) (0) | 2020.02.12 |
JAVA8 - Stream 사용하기 - 2(sorted 데이터 정렬) (0) | 2020.02.12 |