URI encoded image는 다음과 같이 바이너리 데이타가 아닌 문자열 처럼 이미지를 다룹니다.
<img src="data:image/png;base64,iVBORw0K..." />
어떤 Javascript library는 이미지 처리시 URI encoded image형태로 이미지 데이타를 관리하는 경우가 있습니다.
HTML5 canvas를 이용하는 라이브러리를 사용하다가 예상치 않은 에러를 만나게 됬습니다.
1. canvas에서 이미지 생성 ----> 2. jQuery Ajax post -----> 3. Codeigniter controller
3번 과정 중에 오류가 발생한 것입니다.
기존에 이상없이 잘 사용하던 기능인데 왜 그럴까 파고 들었더니 다음의 코드가 문제였습니다.

159라인에서 오류가 발생합니다. $member_sign_image변수를 확인해 보니
"[removed]iVBORw0KGgoAAAANSUhEUgA..." 로 '[removed]' 문자열로 앞부분이 치환되어 있습니다.
정상적인 경우라면 "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA..."와 같은 문자열이어야 합니다.
이 경우의 원인은 'Global XSS Filtering'의 설정을 TRUE로 해주었기 때문이었습니다.

XSS필터를 활성화함으로서 POST데이타인 이미지스트링의 앞부분을 위험요소로 판단한것입니다.
$this->input->post()는 $_POST에 비해 여러 장점이 있지만, XSS적용시 이미지스트링을 처리하는데 있어서 원하는 결과를 얻을 수 없습니다.
이미지스트링 처리시에는 $this->input->post()를 사용하지 말고 $_POST를 사용하세요.
XSS설정여부와 관계없이 항상 동일한 결과를 얻을 수 있습니다.
$member_sign_image = isset($_POST['member_sign_image']) ? $_POST['member_sign_image'] : NULL;
'IT > PHP' 카테고리의 다른 글
Class 'SimpleXMLElement' not found (0) | 2022.02.22 |
---|---|
Windows IIS 환경에서 Codeigniter3의 index.php 없애기 (1) | 2020.10.09 |