生田情報メディア

各種システム

便利なツール

関連リンク

CGI機能について (suEXEC方式)

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 方式に移行していただきますよう、よろしくお願いします。

設定方法

  1. public_htmlディレクトリ (または local_html)の下 に、CGI実行ファイル を作成します。
    ◎ CGI実行ファイルはPerlスクリプトLinuxバイナリ実行ファイルなどが動作します。
    ◎ CGIの拡張子は、 .cgi  としてください(例: meiji.cgi)。 他の拡張子ではCGIは動作しません。

  2. CGIプログラムのファイルパーミッションを 700 (UNIX。ファイルの作成者のみ、そのファイルの読み書きおよび実行が可能な属性のこと)にする。
    1. samba00.isc.meiji.ac.jp へSSHやtelnetを用いてリモートログインする。
    2. CGI実行ファイルのパーミッションを 700 にする。
      % chmod 700 meiji.cgi (CGI実行ファイル名が meiji.cgiの場合)

  3. CGI実行ファイルを呼び出す HTML ドキュメントを作成します。
    1. FORM 文中の ACTION の引数は、public_html(またはlocal_html)以下に作成したCGI実行ファイルを指定する。
      [例] < FORM METHOD="POST" ACTION="meiji.cgi" >

  4. 完了。

CGIサンプル

例えば、次のような HTML 文書にて、Webからの簡易メイル送信サービスを行うことができます。

<HTML>

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=x-euc-jp">
  <title> simple mail </title>
</head>

<BODY BGCOLOR="#99ffff">
  <CENTER><H1> simple mail </H1> </CENTER>
  <FORM METHOD="POST" ACTION="form-mail.cgi">
  <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.cgi は次のような 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
}
 

上へ戻る

明治大学 MEIJIUNIVERSITY

© Meiji University,All rights reserved.