Meiji Mail(Office365)
Webサーバ(http://www.isc.meiji.ac.jp 及び http://local.isc.meiji.ac.jp) のセキュリティの見直しに伴い、CGIの利用方法がsuEXECを用いる方式に変更となりました。
2013年度までは経過措置として、本ドキュメントに記載されている従来の cgiwrap によるCGIも動作しますが、2013年度末をもってcgiwrap は廃止となります。
つきましては、http://www.isc.meiji.ac.jp または http://local.isc.meiji.ac.jp にて CGIを作成している皆様は、2013年度内に、suEXEC 方式に移行していただきますよう、よろしくお願いします。
設定方法
- public_htmlディレクトリの下 に、CGI実行ファイル を作成します。
- ◎ CGI実行ファイルはPerlスクリプトやLinuxバイナリ実行ファイルなどが動作します。
- CGI実行ファイルを呼び出す HTML ドキュメントを作成します。CGI は次のいずれかの方法で指定してください。
- ◎ METHOD が GETの場合:
- FORM 文中の ACTION の引数は、 /cgi-isc/cgiwrap を指定する。
※ 学内のみアクセス可能なページとして、local_htmlディレクトリ内でCGIを作成する場合は、 /cgi-isc/cgiwrap-l を指定してください。
[例] < FORM METHOD="GET" ACTION="/cgi-isc/cgiwrap" > - FORM文の次行にて、変数 user に 自分のログイン名を指定する。
[例] < INPUT TYPE="hidden" NAME="user" VALUE="ex12345" > (変数userに、自分のログイン名(ex12345) を代入) - FORM文の次行にて、変数 script に CGIスクリプト名を指定する。
[例] < INPUT TYPE="hidden" NAME="script" VALUE="form-mail.pl" > (変数userに、CGI実行ファイル名(form-mail.pl) を代入)
-
◎ METHOD が POSTの場合:
- FORM 文中の ACTION の引数は、/cgi-isc/cgiwrap を指定し、 さらに続けて、自分のログイン名、CGI実行ファイル名を指定する。
[例] < FORM METHOD="POST" ACTION="/cgi-isc/cgiwrap/ex12345/form-mail.pl" >
- FORM 文中の ACTION の引数は、/cgi-isc/cgiwrap を指定し、 さらに続けて、自分のログイン名、CGI実行ファイル名を指定する。
- 完了。
例
例えば、次のような HTML 文書にて、Webからの簡易メイル送信サービスを行うことができます。
なお、form-mail.pl は次のような Perlスクリプトです。
<HTML> <head> <meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp"> <title> simple mail to postmaster </title> </head> <BODY BGCOLOR="#99ffff"> <CENTER><H1> simple mail to postmaster</H1> </CENTER> <FORM METHOD="POST" ACTION="/cgi-isc/cgiwrap/ex12345/form-mail.pl"> <OL> <LI>あなたのお名前: <INPUT TYPE="text" NAME="realname" size="30"> <br> <LI>あなたのメイルアドレス: <INPUT TYPE="text" NAME="username" SIZE="30" VALUE="hogehoge@isc.meiji.ac.jp"> <br> <LI>コメント記入欄:<br> <TEXTAREA NAME="comments" ROWS="9" COLS="60" ></TEXTAREA> </OL> <UL> <INPUT TYPE="reset" VALUE=" 入力項目のRESET "> <INPUT TYPE="submit" VALUE=" 入力の終了(送信)"> </UL> </FORM> </BODY> </HTML> |
なお、form-mail.pl は次のような Perlスクリプトです。
#!/usr/bin/perl ←必ずこの通り書いてください $to = 'ex12345@isc.meiji.ac.jp'; $mailprog = "/usr/lib/sendmail $to >/dev/null 2>&1"; print "Content-type: text/html\n\n"; print "<HTML><Head><Title>Thank you</Title></Head>\n"; print "<Body><H1>Thank you</H1>\n"; print "Thank you for sending mail to <I>$to</I>!<P>"; print "</BODY></HTML>\n"; # Get the input read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); # Split the name-value pairs @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); # Un-Webify plus signs and %-encoding $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; # Uncomment for debugging purposes # print "Setting $name to $value<P>"; $FORM{$name} = $value unless $name != "comments" && &CGI_is_danger_arg($value); } # If the comments are blank, then give a "blank form" response &blank_response unless $FORM{'comments'}; open (MAIL, "|$mailprog") || die "Can't open $mailprog!\n"; print MAIL "Reply-To: $FORM{'username'} ($FORM{'realname'})\n"; print MAIL "Subject: WWW comments (Forms submission)\n\n"; print MAIL "名前: $FORM{'username'} ($FORM{'realname'})\n\n"; print MAIL "-<begin>------------------------------------------------\n"; print MAIL "$FORM{'comments'}\n"; print MAIL "-<end>--------------------------------------------------\n\n"; close (MAIL); # ------------------------------------------------------------ # subroutine blank_response sub blank_response { print "Your comments appear to be blank, and thus were not sent. "; exit; } # ------------------------------------------------------------ # check CGI args sub CGI_is_danger_arg { local($cgival)=@_; return 1 if ($cgival =~ /[;`<>\|&\*]/); #danger return 0; #safe } |