XSS 방지 처리 작업 중 발생한 JSON parse error 처리 방법
6월에 진행 중이던 프로젝트에서 XSS 방지 처리 작업 하면서 발생한 문제 해결법 정리 해 둔 내용인데 그동안 왜 발행을 안 하고 있었는지 모르겠는데 찾은 김에 포스팅하려고 합니다. Spring에서 JSON에 XSS 방지 처리 하기를 읽고 크로스 사이트 스크립팅(XSS: Cross Site Scripting) 작업을 진행 중 아래와 같은 에러가 발생했습니다.
console 에러 내용
2018:06:22 14:11:27.639 ERROR --- [http-nio-8080-exec-8] c.m.c.e.GlobalExceptionHandler : [Global Exception Handler] : org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Unrecognized field "userPagingCallback" (class cohttp://m.mizmedi.user.vo.intro.OtherVo), not marked as ignorable; nested exception is cohttp://m.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "userPagingCallback" (class cohttp://m.mizmedi.user.vo.intro.OtherVo), not marked as ignorable (142 known properties: "amrsvCnt", "nonUseFlag", "hp", "nextPkId", "cdTreatTypeExp", "custKey", "count", "spclClncFlag", "currentPageNumber", "isInterested", "tmpAMMaxRsvCnt", "startRow", "holidayStartDt", "coopStatExp", "pchtml", "deptType", "baseCodeSeq", "orderby", "endDate", "totalCount", "subject", "subDeptCode", "rowsPerPage", "deptKorName", "ampmFlag", "tmpAMRsvCnt", "upperPkId", "multiSubDeptCode", "applyDate", "year", "rsv_AVAILABLE", "regDt", "cdSex", "tmpPMRsvCnt", "prevPkId", "doctorName", "acptCancelFlag", "mobilehtml", "holidayEndDt", "dayState", "selectType", "holiday", "deptPkId", "srchType", "addr1", "addr2", "tmpPMMaxRsvCnt", "maxPatPerintv", "sex", "cnt", "sPatId", "reserveDt", "tmpPMRsvFlag", "phone", "homeAddr", "ct", "pkId", "partnerDocLicNo", "partnerDocHp", "content", "cdMediteam", "regUser", "month", "codeValue", "mobilehtml2", "newOpdCnt", "customerName", "clncEndTime", "tripStartDate", "zipcode", "locationType", "schedule", "cdSexExp", "doctorId", "day", "reservable" [truncated]])
at [Source: java.io.PushbackInputStream@264a7b54; line: 1, column: 150] (through reference chain: cohttp://m.mizmedi.user.vo.intro.OtherVo["userPagingCallback"])
개발자 도구 에러 내용
{status: "500",…}
client:"0:0:0:0:0:0:0:1"
etc:null
message:"JSON parse error: Unrecognized field "userPagingCallback" (class cohttp://m.mizmedi.user.vo.intro.OtherVo), not marked as ignorable; nested exception is cohttp://m.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "userPagingCallback" (class cohttp://m.mizmedi.user.vo.intro.OtherVo), not marked as ignorable (142 known properties: "amrsvCnt", "nonUseFlag", "hp", "nextPkId", "cdTreatTypeExp", "custKey", "count", "spclClncFlag", "currentPageNumber", "isInterested", "tmpAMMaxRsvCnt", "startRow", "holidayStartDt", "coopStatExp", "pchtml", "deptType", "baseCodeSeq", "orderby", "endDate", "totalCount", "subject", "subDeptCode", "rowsPerPage", "deptKorName", "ampmFlag", "tmpAMRsvCnt", "upperPkId", "multiSubDeptCode", "applyDate", "year", "rsv_AVAILABLE", "regDt", "cdSex", "tmpPMRsvCnt", "prevPkId", "doctorName", "acptCancelFlag", "mobilehtml", "holidayEndDt", "dayState", "selectType", "holiday", "deptPkId", "srchType", "addr1", "addr2", "tmpPMMaxRsvCnt", "maxPatPerintv", "sex", "cnt", "sPatId", "reserveDt", "tmpPMRsvFlag", "phone", "homeAddr", "ct", "pkId", "partnerDocLicNo", "partnerDocHp", "content", "cdMediteam", "regUser", "month", "codeValue", "mobilehtml2", "newOpdCnt", "customerName", "clncEndTime", "tripStartDate", "zipcode", "locationType", "schedule", "cdSexExp", "doctorId", "day", "reservable" [truncated]])↵ at [Source: java.io.PushbackInputStream@264a7b54; line: 1, column: 150] (through reference chain: cohttp://m.mizmedi.user.vo.intro.OtherVo["userPagingCallback"])"
sessionId:"2e376416-883f-4572-be1d-6375e6f1976a"
status:"500"
uri:"/intro/other/reserve/list"
user:null
해결 방법
ObjectMapper, UnrecognizedPropertyException, JsonInclude 예시 글을 참조하여 다음과 같이 각 VO 클래스 정의 작업을 진행하였습니다.
@JsonIgnoreProperties(ignoreUnknown = true)
위에 작성한 어노테이션 대응 import는 다음과 같습니다.
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;