• ベストアンサー

CGIへの直リンク防止方法について

CGIへの直リンクの防止方法について質問です. MacOS X でWEBサーバーを構築しています.httpdはapacheです. 現在,http://www.aaa.jp/bbb/ccc.htmlからhttp://www.aaa.jp/cgi-bin/ccc.cgiへリンクさせています.ccc.htmlへは.htaccessを用いてパスワードによるアクセス制限を行っております. 今の設定ですと,cgiファイルへ直接リンクできてしまいます.そこで,直接リンクを防止するために,apache内に <Directory /library/var/cgi-bin> SetEnvIf Referer "^http://www\.aaa\.jp/ ref_ok order deny,allow deny from all allow from env=ref_ok </Directory> という記述をしました.しかしこの記述を加えるとcgiを実行できなくなってしまいます.cgi-biフォルダ内の.htaccessを有効にして,.htaccessで記述してもうまくいきません. この記述はhttp://www.shtml.jp/htaccess/referer.htmlを参考にしました. どこがおかしいところはありますでしょうか. ご教授お願いします.

質問者が選んだベストアンサー

  • ベストアンサー
  • microham2
  • ベストアンサー率30% (64/207)
回答No.1

たぶん、CGIはbasic認証ではチェックできないと思います。 CGIプログラムの先頭で環境変数の $ENV{'HTTP_REFERER'} をチェックして、どこから飛んできたかを調べたらいかがでしょうか? あるいは、呼び出すプログラム側から、POSTでhidden属性でパラメータを渡して、CGI側でこのパラメーターをチェックする方法もあると思います。

参考URL:
http://www.futomi.com/lecture/env_var/http_referer.html
karuu
質問者

お礼

回答ありがとうございました. CGIプログラムでREFERERをチェックする方法で無事解決することができました.

その他の回答 (3)

回答No.4

#2ですが コピーしたときに余分なものが付いちゃいましたね 書き直し >SetEnvIf Referer "^http://www\.aaa\.jp/ ref_ok   "が足りません SetEnvIf Referer "^http://www\.aaa\.jp/" ref_ok   ですね

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.3

> SetEnvIf Referer "^http://www¥.aaa¥.jp/ ref_ok パターンが二重引用符で閉じられてないですが、それのせいでは。 単なる打ち間違いでなければですが。 error_logに何か記録されてないか、確認してみては。 あとは、 ・パス名の大文字小文字・全角半角を混同してないか? ・エスケープ記号のバックスラッシュ(0x5c)を円マーク(0xc2a5:UTF-8)にしてないか? ――とか。

karuu
質問者

お礼

回答ありがとうございます. " は打ち間違えです.失礼しました. 無事解決することができました.

回答No.2

まず >SetEnvIf Referer "^​http://www​\.aaa\.jp/ ref_ok "が足りません SetEnvIf Referer "^​http://www​\.aaa\.jp/" ref_ok   ですね それから参考までに、、、RefererはUAの任意申告なので ・Norton Internet SecuirityなどではブラウザがRefererを吐く事を抑制しますので  CGIだろうとhttpdのコンフィグレーションだろうと吐いていないものを検知することは出来ません ・逆に自作UAなら嘘のRefererを吐く事も可能ですので  セキュリティ目的で質問のようなことをされるのなら、少々問題かと思います。 あとついでに ・ http://oshiete1.goo.ne.jp/qa2049609.html  にて  SetEnvIfのTESTをするにはCGIで%ENV一覧を表示してみろ のようなことを書きましたが  Suexec環境の場合はこの手は使えませんですね http://oshiete1.goo.ne.jp/qa2233150.html http://oshiete1.goo.ne.jp/qa2401342.html

karuu
質問者

お礼

回答ありがとうございます. " は打ち間違えです.失礼しました.

関連するQ&A