날짜: 1996-06-03 | 글쓴이: 도아 | 5952 번 | 프린트 | 메일로보내기

제 3강 - 외부함수 호출시 주의점


eval(), exec(), popen()을 절대 사용해서는 안된다는 것은 아니다. 이것들을 사용하기 전에 어떤 메카니즘에 의해서 이 명령어들이 동작하는지를 정확하게 이해하고 있어야 한다.

어떤 경우에는 사용자 입력을 쉘을 통해서 보내는 것을 피할 수도 있다. 예를 들어 sendmail 프로그램으로 수신자의 주소를 보내는 경우 '-t' 옵션을 사용하면 명령행 상에서 수신자 주소를 받아들이지 않고 e-mail 해더 중에 'To:' 필드에 있는 주소로 메일을 보내게 된다. 따라서 앞의 예는 이 기능을 사용해서 다음과 같이 바꿀 수 있다.

$mailto = &get_name_from_input; # read the address from form
open (MAIL,"| /usr/lib/sendmail -t -oi");
print MAIL <<END;
To: $mailto
From: me (me\@nowhere.com)
Subject: nothing much

Hi there!
END
close MAIL;

이 프로그램에서는 한 라인의 처음에 '.'이 있더라도 sendmail이 끝나지 않도록 하기 위해서 '-oi'라는 옵션도 사용하고 있다. C 프로그램에서는 system()으로--/bin/sh을 통해서 외부 명령을 수행한다─명령을 수행하는 것보다는 exec()함수를 사용해서 외부 프로그램을 수행하는 것이 바람직하다.

되도록 쉘을 수행하지 않고 작업을 수행하는 방법을 찾아야 한다. 어쩔 수 없이 쉘을 사용해야 하는 경우에는 쉘 메타문자들이 있는지 입력을 반드시 검사해야 한다. 쉘 메타문자들 중에 검사해야 될 것들은 다음과 같다.

&;`'\"|*?~<>^()[]{}$\n\r

그리고 사용자의 입력이 원하는 모양대로 입력되었는지 반드시 검사하는 것이 바람직하다. 예를 들어 e-mail 주소를 제대로 입력했는지 검사해보기 위해서는 다음과 같이 할 수 있다.

$mail_to = &get_name_from_input; # read the address from form
unless ($mail_to =~ /^[\w-.]+\@[\w-.]+$/) {
   die 'Address not in form foo@nowhere.com';
}


다음글: 제 4강 - 펄 언어로 안전한 스크립트 작성하기 (7498)1996-06-04
이전글: 제 2강 - CGI 프로그래밍시 주의점 (7015)1996-06-02

세상사는 이야기

  • 오타도 즐거운 안드로 >
  • 최고의 OCR 어플, Text >
  • 누구나 할 수 있는 순 >
  • 듀오백 컨텐츠 허브, >
  • 초딩도 할 수 있는 아 >
  • 듀오백 2.0, 최적의 등 >
  • 의자이기를 포기(?)한 >
  • 야후의 꼴통 짓과 플리 >
  • 책을 테이크 아웃? 크 >
  • 전자책(크레마 터치), >


  • RSS 구독 (익명 | 회원 | 강좌 | 포럼)
    (C) 1996 ~ 2014 QAOS.com All rights reserved.