원격 브로우저가 받아들일 수 있는 MIME 형식의 목록을 리턴한다. MIME 형식에따라 이 메소드에 하나의 인자를 주면 $query->accept('text/html')에서 처럼 이 타입에대한 브로우저의 등록정보(?)에 상응하는 실수값, 즉, 0.0(원하지 않음)~1.0까지의 실수 값을 리턴한다. 브로우저의 허용 목록에대한 묶음 형식(예: text/*)또한 올바르게 처리된다.
raw_cookie()
넷스케잎 1.1 이상의 버전에서 구현된 HTTP 확장인, HTTP_COOKIE 환경변수를 리턴한다. 쿠키는 특별한 형식을 가지고 있으며 이 메소드는 원래의 형식 그대로를 리턴한다. 쿠키의 설정과 복원은
주의:
Money$oft의 멍청한 IIS는 추가적인 경로정보를 가져오지 못한다. 펄의 DLL 라이브러리(ISAPI)를 사용한다면 IIS는 추가적인 경로정보를 펄 스크립트로서 실행하려할 것이다. 정상적인 확장지 연결을 사용하면 경로정보는 환경변수로서 존재하지만 옳은 정보는 아니다. IIS를 사용할 때에는 CGI 스크립트내에서 추가적인 경로정보를 사용하지 않는 것이 최선이다.
path_translated()
path_info()
와 같지만 실제 시스템 경로로 변환된 경로정보를 리턴한다. 예:
/usr/local/etc/httpd/htdocs/additional/stuff
Money$oft의 멍청한 IIS는 이 것역시 제대로 처리하지 못한다.
remote_host()
원격 호스트의 이름(사용할 수 있다면)이나 IP를 리턴한다.
script_name()
자기 참조 URL의 경우, 부분 URL로서 스크립트의 이름을 리턴한다.
referer()
현재의 스크립트를 호출한 페이지의 URL을 리턴한다.
auth_type ()
스크립트에서 사용된 인증 방법(인증한 경우)을 리턴한다.
server_name ()
서버의 이름을 리턴한다(보통 컴퓨터의 호스트 명)
virtual_host ()
가상 호스트를 사용하는 경우 브로우저를 이용해서 실제 접속한 호스트의 이름을 리턴한다.
server_software ()
서버 소프트웨어와 판번호를 리턴한다.
remote_user ()
사용자 인증에 사용된 사용자 ID(인증된 경우)를 리턴한다.
user_name ()
여러가지 다양한 기법을 사용해서 원격 사용자의 이름을 구하려고 시도한다. 이 것은 단지 Mosaic과 같은 오래된 브로우저에서만 동작한다. 넷스케잎은 사용자의 이름을 전달하지 않는다.
request_method()
스크립트를 접근하는데 사용된 메소드를 리턴한다. 보통 'POST', 'GET'
또는 'HEAD' 중 하나이다.
CGI.pm이 갖는 잠재적인 문재는 크기에 관계없이 게시하려고 한다는 것이다. 교활한 해커는 수메가 바이트를 CGI 스크립트에 전송하으로서 특정 사이트를 공격할 수 있다. CGI.pm은 게시된 전체 데이타를 읽어 변수로 저장하려 하고 결과적으로 메모리 초과가 발생할 때까지 스크립트는 메모리를 점유하게된다. 스크립트가 메모리를 할당하려고 할 때 시스템은 극적으로 느려진다. 이 것이 서비스 공격의 부정적인 형태이다.
또 다른 가능한 공격은 원격 사용자가 강제로 CGI.pm으로하여금 큰 파일의 업로드하게 만드는 것이다. 스크립트가 업로드된 파일을 수신하지 않으려고 할 지라도 CGI.pm은 업로드 받아 임시 디렉토리에 이 파일을 저장한다. CGI.pm은 업로드가 종료되면 자동적으로 이 파일을 삭제한다. 그러나 그동안에 원격 사용자가 업로드한 데이타가 서버의 디스크 공간을 완전히 채울 수 있으며 이 것이 다른 프로그램에 문제를 일으킬 수 있다.
부적정인 서비스 공격을 피하는 최선의 방법은 CGI 스크립트가 사용할 수 있는 메모리 량, CPU 시간, 디스크 공간을 제한하는 것이다. 몇몇 웹 서버는 이 것을 수행하는 내장된 기능을 가지고 있다. 다른 경우에 CGI 자원 사용의 최고 한도를 설정하기위해 limit나 ulimit를 사용할 수 있다.
CGI.pm은 또한 부정적인 서비스 공격에대한 몇몇 내장된 보호책을 가지고 있지만 이들은 사용하기전에 먼저 활성화시겨야 한다. 이들은 CGI 이름공간에서 두개의 전역 변수 형태를 취한다.
$CGI::POST_MAX
음수 이외의 값으로 설정되면 이 변수는 게시할 수 있는 크기에대한 최고한도(바이트)를 설정한다. CGI.pm이 최고한도보다 큰 데이타를 게시하려고 하면 즉시 오류메시지를 출력하며 스크립트를 종료한다. 이 값은 일반적인 게시와 multipart 게시(파일업로드) 모두에 효과가 있으며 이 것은 파일 업로드시 파일의 최대 크기를 제한하는 의미도 갖는다. 이 값을 적당히 큰 값(1 MB와 같은)으로 설정할 수 있다.
$CGI::DISABLE_UPLOADS
"0"이 아닌 값이 설정하며 파일 업로드 기능을 완전히 사용할 수 없게된다. 다른 폼 값은 정상적으로 동작한다.
두 가지 다른 방법으로 이들 변수를 사용할 수 있다.
스크립트대 스크립트
스크립트의 시작부분(use문 바로 다음)에 이 변수를 설정한다.
use CGI qw/:standard/;
use CGI::Carp 'fatalsToBrowser';
$CGI::POST_MAX=1024 * 100; # 최대 100KB만 게시
$CGI::DISABLE_UPLOADS = 1; # 업로드 하지 못함
모든 스크립트에 대해
CGI.pm을 열고
$POST_MAX
와 $DISABLE_UPLOADS에대한 부분을 찾아 이 것을 원하는 값으로 설정한다. 파일 선두의
initialize_globals()
라는 서브루틴에서 이들을 찾을 수 있을 것이다.
$POST_MAX
보다 큰 파일을 게시하려는 시도는 치명적인 오류를 발생한다. 앞서의 예에서 보여진 것처럼 브로우저 창에 치명적 오류 메시지를 출력하기 위해 CGI::Carp 모듈을 사용할 수도 있다. 그렇치 않으면 원격 사용자는 일반적인 "500 Internal Server" 오류 메시지만 보게될 것이다.