프리랜서 웹디자이너 RELATION RELATION.CO.KR

RELATION 로고

PHP 웹프로그래밍

[MYSQL PHP 함수] urlencode(), base64_encode() 함수

2017.11.29
urlencode() / urldecode():
하나의 특수문자, 한글, multi-byte 문자를 %XX 형식으로 변환합니다. 길이가 좀 길어진다는게 단점입니다. 또한 [0-9a-zA-Z] 등은 encode 하지 않아 그대로 보인다는 단점(?) 도 있습니다.
보안성이 없거나 크게 요구되지 않는 경우나 일반적으로 많이 사용하는 방법이며, URL GET 방식으로 어떤 값을 넘길때도 많이 사용됩니다.


base64_encode() / base64_decode()
변환된 문자는 [0-9a-zA-Z+/=] 문자들로 구성되어지며 역시 약간 길이가 길어집니다.
쉽게 눈으로 판독(decode)할 수 없다는 장점(?)도 있습니다. 저수준의 보안성이 요구될때 사용하는 경우가 많습니다. URL GET 방식으로 어떤 값을 넘길때도 사용되지만 약간의 문제점이 있습니다.(+, / 문자 처리 문제, 아래 참고)


serialize() / unserialize()
이 함수는 어떤 특정 변수(variable)의 형태를 그대로 유지하면서 하나의 문자열로 변환합니다. 실제 본문의 문자열은 다른 형태로 변환되지 않으며, 다만 변수 형태를 유지하기 위해서 특정 형태의
문자열들이 붙습니다.
이 경우는 보통, 1차원 또는 다차원 배열을 하나의 문자열로 만들어 마치 하나의 문자열 변수처럼 취급하고자 할 경우에 많이 사용합니다. (쿠키나 세션 또는 파일저장 등에 많이 사용됨)
역시 URL GET 방식으로도 사용될 수 있지만 약간의 문제점이 있습니다.
(+, /, &, ?, # 등등 특수문자나 multi-byte 문자 처리 문제)


user_encode() / user_decode()
GET 방식등으로 어떤 값을 넘길 경우, 비교적 보안성이 요구될때 이런 사용자 정의 함수에 의해서 단방향이 아닌 쌍방향 함수를 이용하는 방법을 말합니다.
이때는 비밀키가 노출되면 안되겠죠...


이렇게 약간씩 그 쓰임새가 다르기 때문에 상황에 따라 적절한 방법을 선택하여 사용하면 됩니다.

*주의)
base64_encode() 로 변환된 문자열을 곧바로 GET 방식으로 넘기면 약간 문제점이 있습니다.



즉, '+' 문자와 '/' 문자인데, 값을 받을 때 '+'를 '+' 자체가 아닌 공백(%20)으로 인식하는 경우가 있습니다. (PHP 버전 문제아니면, 특이한 USER_AGENT 해석의 차이인듯)
(공백 ' '(%20)을 urlencode 하면 '+' 가 되죠)



따라서 '+' 를 다른 문자(?,/,#,&등은 절대 금물)나 문자열로 교체해줘야 합니다.
또한 '/' 문자도 디렉토리 구분이나 PATH_INFO 의 구분으로 인식할 수 있으므로 (PATH_INFO 로 구분하여 값을 받을 경우)역시 적절한 문자나 문자열로 교체해줘야 합니다.




*정리하면)
문자열(또는 특정 변수의 문자열 형태)을 URL GET 방식으로 넘길때 조심해야할 문자가 있습니다.
즉,
(공백), +, ?, #, &, / 등입니다.



(공백) : 이하를 해석하지 못하는 USER_AGENT 가 있을 수 있음
+ : 공백으로 해석 또는 인식되는 경우가 있음
? : 이하 쿼리로 인식됨
# : 이하 문자를 fragment 로 인식될 수 있음
& : 쿼리의 구분으로 인식될 수 있음
/ : PATH_INFO 로 구분한다면 하나의 path 로 인식되지 않음



이런 점만 주의한다면 어느 함수를 사용하든지 상관없겠죠(보안성 문제 제외).
이런 문자 처리를 자동(?)으로 처리해주는게 urlencode() 함수이며, 문자열 보안성은 결여되어 있습니다.
따라서, 이런 관점에서, 단독적인 base64_encode() 나 serialize() 함수는 URL GET 방식에 적합하지 않습니다.




http://www.relation.co.kr/images_board/board_system_php/115/demo.html

이 포스트 공유하기

글수정  글삭제 전체목록
<
 
1
           
검색    글쓰기
번호 제 목 작성자 작성일 조회수
중요 [서버] 보안서버 무료 SSL 구축 꿘쓰 2017.09.20 6086
중요 [MYSQL함수] PHP, MYSQL 기초 쿼리문 정리 꿘쓰 2011.04.15 7350
중요 [MYSQL PHP 함수] PHP, MYSQL 기초 쿼리문 정리   꿘쓰 2006.03.10 12625
186 [소스] 특정일 특정 날짜 구하기 작성글은 비공개로 설정 되었습니다. 꿘쓰 2020.08.31 1
185 [서버] URL 에서 파일 확장자(.html , .php) 없애기!!! 꿘쓰 2020.03.16 109
184 [소스] PHP function 테스트 꿘쓰 2020.03.05 120
183 [MYSQL PHP 함수] is_dir 꿘스 2020.01.31 121
182 [MYSQL PHP 함수] DB table 같은 이름 체크 꿘쓰 2019.12.13 154
181 [소스] 게시글 번호로 페이지 번호 구하기 댓글 없는 게시판 작성글은 비공개로 설정 되었습니다. 꿘쓰 2019.11.18 3
180 [소스] 페이지 이동, 페이지 자동이동 PHP 꿘쓰 2019.11.04 188
179 [MYSQL PHP 함수] PHP 현재 페이지명, 도메인명 URL 정보 꿘쓰 2019.06.24 280
178 [기타] PHP 소수점 올림,반올림, 버림 꿘쓰 2018.07.06 949
177 [기타] php를 이용한 mysql 엑셀 파일 만들기 꿘쓰 2019.07.24 1394
176 [MYSQL PHP 함수] 특정값 조회 where 컬럼명 in (값,,,,,,) 꿘쓰 2018.01.15 938
175 [서버] 보안서버 무료 SSL 구축 꿘쓰 2017.09.20 6086
174 [소스] LK Query 작성글은 비공개로 설정 되었습니다. 꿘쓰 2017.08.23 2
173 [소스] php xml 파일 생성하기 작성글은 비공개로 설정 되었습니다. 꿘쓰 2017.06.05 1
172 [소스] 네이버 신디케이션 날짜 변경 작성글은 비공개로 설정 되었습니다. 꿘쓰 2017.06.01 1
171 [소스] 날짜 계산(DATE_ADD) 꿘쓰 2017.05.08 1116
170 [소스] 기간별 호텔 룸가격 구하기 작성글은 비공개로 설정 되었습니다. 꿘쓰 2017.05.05 1
169 [소스] 기간 검색 작성글은 비공개로 설정 되었습니다. 꿘쓰 2017.05.05 3
168 [문자열함수] 알파벳 순서대로 출력하기 꿘쓰 2017.02.23 2094
167 [소스] PHP를 이용한 RSS 만들기 꿘쓰 2016.07.30 1410