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