특정 폼에 %가 들어가는 경우 DB에 저장이 안되는 이슈가 발생하여 수정하는 중에 삽질하게 된 내용을 정리 차원에서 기록한다.

대부분 %의 문제는 DB에 SQL Injection이나 XSS 등의 문제를 회피하기 위해 발생하는 현상이라서 DAO 처리 과정 중에 문제가 발생 한 것이 아닐까란 추측으로 디버깅을 해 보았으나 SQL Prepare가 잘 되어 있었다.

고로 DAO 상에서 발생하는 문제는 아니라는 결론...


그럼 서버 단의 Filter에서 파라미터를 잘라 먹는 것은 아닐까란 생각으로 이미 만들어진 보안 Filter를 찾아서 몇 시간 삽질 했으나 이미 Filter에 값이 들어오기 전 부터 없어진 다는 것을 확인.


그럼 스크립트의 문제인 것인가?란 의문을 가지고 개발자 도구에서 console.log 로 값을 확인.

참고로 다음과 같은 소스로 되어 있었음.



여전희 값은 잘 찍히고 있었음.

그럼 뭐가 문제인가? 하고 보다가 개발자 도구의 network 탭에서 % 문자가 들어가는 경우에만 해당 form의 값이 사라지는 현상이 생김.

오류 메시지는 다음과 같이 나옴.


memo:
(unable to decode value)


"unable to decode value" 란 문장으로 구글링 해 보니 스크립트 단의 문제가 맞고, 해결 방법은 value에 encodeURIComponent를 사용하여 값을 인코딩 해야 한다고 함 ㅠㅠ


$("#"+mode).val() 를 encodeURIComponent($("#"+mode).val()) 처럼 수정하고 테스트 하니 서버에서 아무런 이상 없이 동작하고 DB에도 잘 저장 됨.


오늘도 삽질은 끝이 없구나 ㅠㅠ






WRITTEN BY
체리필터
프로그램 그리고 인생...

받은 트랙백이 없고 , 댓글이 없습니다.
secret
매일 프로그램 삽질은 하고 있지만 이번 건은 유난히 더 삽질이 길었다.
3일 동안 아무런 일도 못하고 이 일에만 매달렸다.
다른 일을 하긴 해야 하지만, 개발자 자존심에 해결하지 못하고 넘어가기에도 뭐 하고...
결국에는 해결하게 되었지만 아무것도 아닌 원인 때문에 해결하고도 짜증이 난다.

증상은 다음과 같다.




소스는 간단하다.
그냥 특정 쿠키를 생성한 다음 response에 실어 보내는 것이다.

그런데 로컬과 서버의 결과물이 달랐다.

* 로컬의 결과물
cookieKey1=bla...bla...;
cookieKey2=bla...bla...;

* 서버의 결과물
cookieKey1="bla...bla...";
cookieKey2="bla...bla...";

둘 간의 차이점은 value 앞 뒤로 쌍따옴표(")가 있느냐 없느냐이다.
큰 차이가 아닐지 모르지만 인증 관련된 작업을 다루는데 있어서 해당 값으로 인해 로그인이 되기도 하고 안되기도 하는 부분이라서 매우 골치 아픈 부분이었다.

소스를 이리도 뜯어보고 저리도 뜯어 봤지만 해결은 되지 않았고,
Googling을 아무리 해 봐도 답은 나오지 않았다.(내 능력 부족 -.-;;)

결국 회사 내 다른 분의 도움을 얻어 로컬과 서버의 tomcat 버젼의 차이때문에 생기는 것임을 알게 되었고 서버의 tomcat 버젼을 5.5.27로 downgrade해서 문제를 해결하게 되었다

관련된 내용은 http://tomcat.apache.org/tomcat-5.5-doc/changelog.html 의 46587 에서 확인해 볼 수 있다.


WRITTEN BY
체리필터
프로그램 그리고 인생...

트랙백이 하나이고 , 댓글이 없습니다.
secret