54 번 글: [PHP] urlencode(), base64_encode(), ... |
글쓴이: 산이
[홈페이지]
|
글쓴날: 2003년 07월 31일 18:51:26 목(저녁) |
조회: 5411 |
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 방식에 적합하지 않습니다.
|
이전글 : [PHP] base64 encoded images
다음글 : [MYSQL][PHP][APACHE]
|
from 61.254.75.40
JS(Redhands)Board 0.4 +@
|
|