[PHP] get_magic_quotes_gpc 함수

  get_magic_quotes_gpc 함수는 php.ini에 magic_quotes_gpc 항목의 설정된 값을 알려준다. 'magic_quotes_gpc = On'으로 켜져 있으면 GET, POST, COOKIE 자료에 addslashes 함수를 자동으로 실행하여 다음 문자들에 거꿀빗금(\)을 넣는다.

  • 작은따옴표(single quote) '
  • 큰따옴표(double quote) "
  • 거꿀빗금(backslash) \
  • NUL (NULL 바이트)

  이 문자들이 데이터베이스나 웹 주소의 물음글(쿼리)에 그대로 들어가서 물음글에서 미리 약속해서 쓰는 문자로 잘못 받아들여지면, 뜻하지 않은 오류가 나거나 SQL 인젝션(injection) 같은 쪽에 취약점이 생길 수 있다. 그래서 이 문자들 앞에 거꿀빗금을 넣어 다른 뜻으로 해석되는 것을 막곤 한다.

  이미 addslashes 함수로 거꿀빗금이 붙은 자료에 addslashes 함수를 다시 쓸 필요가 없다. 오히려 때에 따라 stripslash 함수로 거꿀빗금을 빼야 할 때도 있다. 예전에는 get_magic_quotes_gpc 함수가 돌려주는 값을 살펴 거꿀빗금에 얽힌 처리 방법을 고르곤 했다.

if(get_magic_quotes_gpc()) {
stripslash($str);
}
if(!get_magic_quotes_gpc()) {
addslashes($str);
}
  그러나 PHP 8.0에서부터 get_magic_quotes_gpc 함수를 쓰면 이런 오류가 나오며 프로그램이 작동하지 않는다.

PHP Deprecated:  Function get_magic_quotes_gpc() is deprecated in /.../???.php on line ???

  예전부터 쓰던 프로그램이라면, PHP 8.0에서도 작동하도록 아래와 같이 function_exists 함수를 쓸 수 있다.

if(function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc()) {
stripslash($str);
}

  ini_get 함수를 써서 php.ini에 magic_quotes_sybase 항목의 설정값을 살필 수도 있다.

if((function_exists("get_magic_quotes_gpc") && get_magic_quotes_gpc()) || (ini_get('magic_quotes_sybase') && (strtolower(ini_get('magic_quotes_sybase'))!="off")) ){
stripslash($str);
}

  magic_quotes_sybase가 magic_quotes_gpc보다 우선하는 것 같은데, magic_quotes_sybase는 관계형 데이터베이스 관리 시스템 제품인 사이베이스(sybase)를 쓰는 사용자를 위한 기능이라고 한다.

▣ 참고한 곳

글 걸기 주소 : 이 글에는 글을 걸 수 없습니다.

덧글을 달아 주세요

  1. ㅇㅇ 2024/07/26 10:12 고유주소 고치기 답하기

    개꿀 빗금이 뭔가 했더니 백슬래시군요

    • 팥알 2024/07/27 18:10 고유주소 고치기 답하기

      역슬래시라는 말도 있지만, 한자+영문으로 만들어진 '역+슬래시'가 어색합니다. 그래서 널리 굳혀진 말은 아니지만 '거꿀빗금'으로 불러 보고 있습니다.