- ベストアンサー
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を参考にしました. どこがおかしいところはありますでしょうか. ご教授お願いします.
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
たぶん、CGIはbasic認証ではチェックできないと思います。 CGIプログラムの先頭で環境変数の $ENV{'HTTP_REFERER'} をチェックして、どこから飛んできたかを調べたらいかがでしょうか? あるいは、呼び出すプログラム側から、POSTでhidden属性でパラメータを渡して、CGI側でこのパラメーターをチェックする方法もあると思います。
その他の回答 (3)
- umasikajiro
- ベストアンサー率67% (545/803)
#2ですが コピーしたときに余分なものが付いちゃいましたね 書き直し >SetEnvIf Referer "^http://www\.aaa\.jp/ ref_ok "が足りません SetEnvIf Referer "^http://www\.aaa\.jp/" ref_ok ですね
- osamuy
- ベストアンサー率42% (1231/2878)
> SetEnvIf Referer "^http://www¥.aaa¥.jp/ ref_ok パターンが二重引用符で閉じられてないですが、それのせいでは。 単なる打ち間違いでなければですが。 error_logに何か記録されてないか、確認してみては。 あとは、 ・パス名の大文字小文字・全角半角を混同してないか? ・エスケープ記号のバックスラッシュ(0x5c)を円マーク(0xc2a5:UTF-8)にしてないか? ――とか。
お礼
回答ありがとうございます. " は打ち間違えです.失礼しました. 無事解決することができました.
- umasikajiro
- ベストアンサー率67% (545/803)
まず >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
お礼
回答ありがとうございます. " は打ち間違えです.失礼しました.
お礼
回答ありがとうございました. CGIプログラムでREFERERをチェックする方法で無事解決することができました.