ようこそNICのホームページへ(なが〜い試運転中)    あなたは2001/5/12以来 人目の来訪者です。
HP パソコン 健康 落語 海外 思うまま 電子工作


HTTPSのcgi呼び出しに制限をかける(2009/01/22)
Last update:2009/02/23  build:2009/01/22




1 HTTPSからcgiを呼び出す時の不正利用を防ぐ

HTTPSを使うのは良いが、cgiを利用した時に不正利用される可能性があることに気づいた。(2009/01/18)。
何とか直接cgiを呼び出すことを制限できないだろうか。

過去に、呼び出されるcgiの中に呼び出すプログラムを 限定する記述があったことを思い出した。 googleで調べていると ここを発見。 これを参考に下記のようにプログラムを書いた。
# ========================
# ファイルによる限定の場合
my $okfile1= 'https://localhost/cgi-call/ddns_update_log.html'; # 呼び出しを許可するファイル名(localhost)
my $okfile2= 'https://外部ddns1/cgi-call/ddns_update_log.html'; # 呼び出しを許可するファイル名(ddns 1)
my $okfile3= 'https://外部ddns2/cgi-call/ddns_update_log.html'; # 呼び出しを許可するファイル名(ddns 2)

&from_check_f; # チェック用のサブルーチン呼び出し


# ---------  チェック用のサブルーチン  -----------------------
sub from_check_f {
 if($ENV{'HTTP_REFERER'} ne $okfile1){
   if($ENV{'HTTP_REFERER'} ne $okfile2){
     if($ENV{'HTTP_REFERER'} ne $okfile3){
        print "不正なCGI呼び出しです。";
        exit;
     }
   }
 }
}
# ---------  チェック用のサブルーチン  END -------------------

cgiに関係して呼び出し元と呼び出されるcgiプログラムの位置(ディレクトリー)関係は以下のとおり。
ディレクトリー構成

/usr/local/apache2/cgi-bin/  ・・・ cgiプログラムの保存場所
/usr/local/apache2/conf/     ・・・ httpd.conf と ssl.confの保存場所


/usr/home/USER/www            ・・・ httpのルート位置
/usr/home/USER/https          ・・・ httpsのルート位置(BASIC認証が必要)
/usr/home/USER/https/cgi-call/  ・・・ cgiを呼び出すhtmlの保存場所(ここのhtmlからのみcgiの呼び出しが可能)
httpsでcgiを使うときは必ずcgiを呼び出すプログラム(呼び出し元のhtmlファイル)を /usr/home/USER/https/cgi-call/  のなかに置き、かつcgiプログラムには呼び出し元の制限をかけること。
例 ’https://外部ddns1/cgi-call/test.html’
  ファイルからのみcgiプログラムが呼び出し可能。


2 ドコモ携帯からはアクセスできない(2009/02/23追記)

ドコモ携帯からアクセスすると、エラーが出る。初め理由がわからず、試行錯誤した。
ドコモ携帯は環境変数 $ENV{'HTTP_REFERER'}を送らないとのこと。それでエラーが出たようだ。
ちなみに、auやソフトバンク携帯は使えるらしい。

パソコンのことへ     HomePage     このページのトップ