直接入力によるアクセス制御について

このQ&Aのポイント
  • 自作のカウンターをSSIで設置する場合、直接入力によるアクセス制御を行う方法はありますか?
  • ブラウザからカウンターのURLを直接入力してもカウントされないカウンターを作りたいです。
  • SSIでカウンターを設置する場合、設置先のWebページ以外からのアクセスにはエラーを返す方法はありますか?
回答を見る
  • ベストアンサー

CGIファイルへのブラウザからの直接入力によるアクセスについて

自作のカウンターをSSIで設置するという前提では 『設置先のWebページ以外ではカウンターを作動 させない』または『設置先のWebページを経由して いないアクセスにはエラーを返す』という方法は 無いでしょうか? 通常、出回っているカウンターはブラウザから カウンターのURLを入力して直接カウンターCGIの ファイルにアクセスしてもカウントされてしまい ますが、このようなアクセスをカウントしない カウンターを作りたいのです。 (実際にカウンターCGIファイルに直接アクセスして  更新ボタンを押しまくるような人はまずいないと  思いますが、自己満足のためにやってみようと  思ったらできなかったため、気になって仕方が  無いのです・・・。) IFRAMEタグで設置するという前提では何とかなったの ですが、SSIで設置する場合はブラウザからの直接 入力によるアクセスと設置先へのアクセスを見分ける 方法が思い付かず、どうにも上手くいきません。 SSIでも設置先のWebページでしか作動しない カウンターCGIの組み方について、何か名案の ある方がおりましたら、何卒ご指導いただけますよう よろしくお願いします。

  • CGI
  • 回答数7
  • ありがとう数1

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

  • ベストアンサー
  • Hasty
  • ベストアンサー率73% (19/26)
回答No.1

SSIなら <!--#exec cmd="~" --> として外部から見れないとこにスクリプトを置いとけばいいのでは?ドキュメントルート以下しか利用できない場合でも、CGIとして実行しないなら環境変数の中身が違うはずだから、その辺でチェックできると思います。

pofpof
質問者

補足

回答ありがとうございます。 私が使っているレンタルサーバーではドキュメントルート以下でしか利用できませんでした。 「CGIとして実行しないなら環境変数の中身が違う」というのは具体的にどのような事なのでしょうか? まだまだ勉強が足りないようで、せっかくお教えいただいたのに内容を今一つ理解できませんでした。 ・カウンターCGIは実行しないとカウントアップも表示もできないのではないかと思うのですが、何か方法が あるのでしょうか?  ・「実行しないなら環境変数の中身が違う」というのもそのメカニズムが分かりません。なぜ「実行しない なら…」という限定が付くのでしょうか? …自分でも色々と工夫してみますが、時間がありましたら上記2点についてお教えいただけると 助かります。よろしくご指導のほどお願いします。

その他の回答 (6)

  • Hasty
  • ベストアンサー率73% (19/26)
回答No.7

ちょっと調べてみたら、Windows用Apacheはバージョンによって、SSIのexec cmdでパスを認識しないバグ(セキュリティホール対策の仕様とも)があるらしいと書いてる掲示板がありました。詳しくは分かりませんが。。。 で、もう僕も当てずっぽうですけど、パスの指定を #exec cmd="C:\home\nexen\public_html\counterf\test.cgi" や #exec cmd="\home\nexen\public_html\counterf\test.cgi" にしてみてはどうでしょうか? また、shtmlファイルと同じディレクトリに置いて、パスなしでファイル名だけ指定したら動くかもしれません。 #exec cmd="test.cgi" あるいは、 #exec cmd="perl C:\home\nexen\public_html\counterf\test.cgi" と、実行するのをPerlにして、スクリプトはその引数にしてみるとか。 (ここでもPerl自体のパスやスクリプトのパスの指定方法を、いろいろ試してみてください。) また、exec cmd自体が機能していないことも考えられるので、 #exec cmd="cd" みたいにDOSコマンドを書いて確かめてみてください。

pofpof
質問者

お礼

これほど丁寧に我慢強く対応していただいたことは今までありませんでした。 また、自分だけではどうにもならず本当に困り果てていたので、このように アドバイスをもらえるありがたさも身に染みました。 これだけ人に頼らざるを得ないレベルで言うのもなんですが、今回の事を 忘れずにこれからもしっかり勉強して、いつか自分も困っている人を 助けてあげられるようになりたいと思います。 Hastyさん、本当にありがとうございました。

pofpof
質問者

補足

長々とすみません。 毎回丁寧に対応していただきありがとうございます。 SSIタグの書き方については一通りやってみたのですがどれもNGでした。 古いバージョンのWindows用Apacheについては同様のことが書かれた掲示板を私も 見かけたのですが、"cd"でもNGだったので最新バージョンでもcmd自体は 使えないという線が濃いように思います。 最初にやろうとしていた事は現状では物理的に困難なようですが、まず可能か否かも 分からなかったし、不可能ならどこに原因があるのかも分からなかったので、 ここまで教えていただき痞えていたモノはスッキリ取れました。 本当にありがとうございます。

  • Hasty
  • ベストアンサー率73% (19/26)
回答No.6

> Perl.exeとPerl5.8.0.exeというのはあるのですが・・・。 それです。ActivePerlというのはディストリビューションで、インタプリタは上記のファイルになります。確か中身は一緒だったと思うので、Perl.exeを選べば大丈夫じゃないかと。

pofpof
質問者

補足

毎回ありがとうございます。 関連付けはできたと思うのですが、やはりcmdはエラーのままです。 「あいうえお」と表示するスクリプト「test.cgi」を書いてカウンターの代わりに置いてみましたが、 <!--#exec cmd="C:/home/nexen/public_html/counterf/test.cgi"-->としても 『(OS 3)指定されたパスが見つかりません。Failed to read cgi file test.cgi for testing』 『(OS 3)指定されたパスが見つかりません。don't know how to spawn cmd child process: C:/home/nexen/public_html/test.shtml』 ・・・という2行がエラーログに書き加えられるだけでした。 「test.shtml」のHTMLソースにはSSIタグは表示されていないのでSSIとしては 認識されているようです。 ちなみに、test.shtmlと同じディレクトリにcounterfというサブディレクトリを 用意し、そのサブディレクトリの中にCGI関連のスクリプトを置いているという状態です。 SSIタグの書き方やhttpc.confに間違いがあるのでしょうか?

  • Hasty
  • ベストアンサー率73% (19/26)
回答No.5

> XPでの.cgiのActivePerlへの関連付けの方法を詳しく教えていただけないでしょうか? 拡張子が.cgiのファイルを右クリックしてプロパティを開き、「プログラム」の右の方にある「変更」ボタンを押します。そこでActivePerlを選択すればいいように思うのですがどうでしょうか?

pofpof
質問者

補足

それが・・・プロパティの変更ボタンからではActivePerlが見つからないのです。 C:\usr\local\binにPerl.exeとPerl5.8.0.exeというのはあるのですが・・・。 パソコン内で検索をかけてもActivePerlが見当たらないのです。 ActivePerlそのものは動いているのですが・・・。 全く・・・自分が情けなくなってきます。 あと少しだとは思うのですが、何とか辛抱強く教えていただけますよう、お願いします。

  • Hasty
  • ベストアンサー率73% (19/26)
回答No.4

> 実行できない場合、これを実行できるようにする方法はあるのでしょうか・・・? Windowsだったらフォルダオプションのファイルの種類で、.cgiの規定のアクションをActivePerlでの実行にしてやればいいと思います。 Unix系だとしたら先頭に #! /usr/bin/perl などの行が入ってるはずですから、動かないとなるとちょっと分かりません。

pofpof
質問者

補足

本当にありがとうございます。 少しは兆しが見えてきたと思ったのですが、Windowsのフォルダオプションで .cgiの規定のアクションをActivePerlにすることができません。 フォルダオプション→ファイルの種類→新規として、cgiと入力→詳細を押して、 「関連付けられているファイルの種類」から「PERL」とか「PERL FILE」という 選択肢を選ぶというのが関連付けの方法として検索エンジンなどで調べたところ 分かったのですが、私のWindowsXPでやってみると「Perl script language」という 選択肢はあるのですが「PERL」と「PERL FILE」という選択肢は無いのです。 試しに「Perl script language」で関連付けてみたのですがNGで、ActivePerlに 問題があったかと思い、インストールし直したのですが 何も変わりませんでした。 Windows2000では関連付けの方法も検索できるのですが、XPで.cgiの規定の アクションをActivePerlにする方法が見つかりません。 XPでの.cgiのActivePerlへの関連付けの方法を詳しく教えていただけないでしょうか? 頼りきりで本当に申し訳ありません。

  • Hasty
  • ベストアンサー率73% (19/26)
回答No.3

exec cmdはその名の通り「コマンドを実行する」ものなので、コマンドとして指定したパスはコンソール上から入力して実行できる必要があります。 絶対パスでもダメということは実行できないということなんじゃないかと思うので、その辺を確認してみて下さい。 (絶対パスってそのコンピュータ内のですよね?ドキュメントルートからのじゃないですよね?)

pofpof
質問者

補足

度々ありがとうございます。 絶対パスはコンピュータ内のとドキュメントルートからの、両方試しましたがどちらもNGでした。 実行できない場合、これを実行できるようにする方法はあるのでしょうか・・・? 検索エンジンでも同じような質問が載っている掲示板はチラホラ見受けられるの ですが、解決している掲示板は全く見当たらず途方に暮れています。 自力では何の収穫も得られないまま、ここまでお付き合いさせてしまい 申し訳ないのですが、寛容にお付き合いいただければ幸いです。 どうか宜しくお願いします。

  • Hasty
  • ベストアンサー率73% (19/26)
回答No.2

CGIとして実行しないだけで、スクリプトは実行します。 <!--#exec cgi="スクリプト名" --> とするとCGIとして実行されますが、 <!--#exec cmd="スクリプト名" --> とすればコマンドとして実行されます。 それぞれで環境変数の中身をファイルに書き出してみると良いと思います。

参考URL:
http://www.tohoho-web.com/wwwssi.htm#Exec
pofpof
質問者

補足

度々すみません。 「CGIとして実行しなければ」という意味は分かりました。 今までinclude virtual一本槍だったので目からウロコでした。ありがとうございます。 ただ、早速execコマンドで試してみたのですが、exec cgiなら正しく 実行されるのにexec cmdにするとエラーになってしまいます。 『(OS 3)指定されたパスが見つかりません。 : Failed to read cgi file・・・』 『don't know how to spawn cmd child process:・・・』 …という2行がセットになりエラーログに記されるという症状です。 <!--#exec cmd="スクリプト名">のスクリプト名の部分を絶対パスにしたり 相対パスにしたり、スクリプトをplファイルに書き変えてみたり… 参考URLを始めSSIについて書いてあるサイトを色々見ながら格闘してみたのですが どうにもうまく行きません。 Apacheのhttpd.confも確認し、execコマンドは使えるようになっていたのですが、 exec cgiは使えてもexec cmdは使えないという事はあるのでしょうか? ちなみに私の今のローカル環境はApache HTTP server2.0.45とActive Perl5.8です。 httpd.confは「http://127.0.0.1/~xxxx/」とブラウザに入力すればローカル環境で作った サイトにアクセスできるよう設定してあります。 cmdがエラーになる原因として何か気になる点がありましたら ご指摘いただけますよう、よろしくお願いします。

関連するQ&A

  • 掲示板CGIのブラウザからのアドレス直接入力によるアクセスやお気に入りからのアクセスを禁止するには?

    直リン禁止はhtaccessでできたのですが、掲示板CGIのブラウザからのアドレス直接入力によるアクセスやお気に入りからのアクセスを禁止し、必ずトップページから入ってもらうようにする方法はありますでしょうか?

  • CGIカウンタの設置場所

     CGIを使ったホームページデビューをしたいと思っているのですが、一つ設計面での重要な問題に突き当たってここに問題を投げかけてみることにしました。  (CGIの際に使う言語はPerlでして、中級者レベルにはなっているという前提でお話しします)  まず、アクセスログを残すためにどのCGIの教科書にも載っているアクセスカウンタを設置したいと思っていて、プログラムを書いています。  プログラム自体を作るのは問題ないのですが、ここで一つの大きな壁にぶつかりました。  それは、プロバイダはCGIの使用は許可しているのですが、SSIは許可していないという問題です。  多くの場合、訪問者が最初にアクセスするのはメインページだと思うのですが、これをプロバイダはindex.htmlにするようにしています。しかし、htmlだと静的ページなのでCGIを使うことができません。カウンタは訪問者がメインページに訪問した回数で数えたいのですが、SSIが禁じられているためにこれもできません。  確かに強引に/cgi-bin/main.cgiとして、訪問者にはここにアクセスしてもらうようにしてもいいのですが、URLの見た目として(つまり、美感の問題)として美しくない気がします。  まとめると、SSIの使えない環境にて、index.htmlをメインページとした場合、アクセスカウンタをどのように設置するのが適切か?というのが現在の私の問題です。  (もしくは、解決案はありえないというアドバイスも一つの有益なアドバイスです)  カウンタの作り方はどのCGIの教科書にも書いてありますが、設置のためのホームページ全体の設計方法については書いていません。  ですので、経験豊富な方々のいそうなこの場所にて聞いてみることにしました。  自宅サーバーを使えば、こうした制限はないとは思いますが、セキュリティ上の問題が心配でそれをやる勇気がまだありません。サーバー用のマシンを買ってもいいのかもしれませんが、そのための費用もまだ不足しています。  ですので、プロバイダ上での公開という前提でアドバイスをいただければと思います。  何か名案があれば教えてください。  よろしくお願いします。

    • ベストアンサー
    • CGI
  • htmlから、ファイル、もしくはCGI実行結果を表示

    htmlのページを開いたときに、部分的にCGIの実行結果、もしくはファイルの中身を表示することは出来ないでしょうか。「インラインフレームを設けて・・・」という意味ではなく、たとえばページを開くごとにある行の数字だけ数字が増えていく、といったカウンターのようなことが出来るようにしたい。 そういうCGIスクリプトを作っているので、CGIをまったく使わないというのは無しで、またSSIは使わないこと前提でお願いします。

    • ベストアンサー
    • Perl
  • 複数ページをカウントするアクセスカウンタ

    トップページに設置したアクセスカウンタで同じHP内のa.htmlやb.htmlなどのに直接アクセスした数もカウントしたいのですが、そういうCGIはありませんでしょうか。 理由としてはHP内の特定ページに直接リンクを張られていることが多く、トップページのカウンタにその数が反映されないので困っているためです。 以上よろしくお願いします。

    • ベストアンサー
    • CGI
  • CGIファイルを読み込みません!

    現在CGIで掲示板を製作中なのですが、PC内で動作確認をしようとファイルにアクセスすると読み込もうとしているのですが、そここから動きません。エラーがあるのかと思いチェックファイルにアクセスしてみると問題なくきちんと作動します。チェックファイルのCGIからなら問題ないのに、直接では作動しません。なぜそのような現象がおきるのでしょうか?何の問題があるのかまったくわからず困っております。どなたか教えていただけないでしょうか?

    • ベストアンサー
    • CGI
  • cgiファイルを直接は見れなくするには

    windowsXP Home SP3 apache2.2でCGIプログラムの勉強をしています。 htmlのformのactionでCGIを呼び出すのは許可して、 cgiファイルのurlを直接指定してアクセスするのは許可しないようにするにはどうすればいいでしょうか? また、htmlのトップ(1つのhtml)にはアクセスできるけど、その他のhtmlにはトップから辿っていくしかない(直接url入力しても見れないようにする)方法はあるでしょうか? なるべく簡素な方法をよろしくお願いします。m(__)m

    • ベストアンサー
    • CGI
  • カウンタCGIについて

    今、カウンタを自作しています。 カウンタの種類はテキストカウンタです。 ですがカウンタを設置しているページからその他のページへ移動し、ブラウザの「戻る」ボタンで戻ってきたときにカウントがされないんです。 カウンタをテキストで表示したい、SSIを使いたくないと言う理由でHTMLページではJavaScriptを用いてCGIの内容を取得するようにしています。 どうしたら解決できるでしょうか?よろしくお願いします。 <index.htm> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>カウンタ</title> </head> <body> <p> <SCRIPT language="JavaScript" src="count.cgi"></SCRIPT> <noscript>JavaScriptをONにしないとカウンタは動きません。</noscript> </p> <p> <a href="http://www.yahoo.co.jp/">Yahoo!Japan</a> </p> </body> </html>

    • ベストアンサー
    • CGI
  • モバイルアクセスカウンタ

    初心者。 モバイル用のアクセスカウンタ設置中です。 CGIROOMさんのモバイルカウンターをダウンロードしました。 http://cgiroom.nu/list/count/mcount/ そこで、質問があるのですが、 モバイルカウンタは、count.cgi?にアクセスしてカウントされますよね?? トップページなどに設置してカウントされるようにしたいのですが、 そのようなことは可能なのでしょうか?? HTMLのソースに 今日のアクセス<img src="CGIまでのパス/count.cgi?mode=t"> と記入しても、 数字は表示はされるのですが、カウントはしないのです。 宜しくお願いします。

    • 締切済み
    • CGI
  • CGIを探しています

    アクセス解析したいhtmlファイルがフレームページなんですが、フレームページのアクセスを正しく解析できるアクセス解析CGIをご存知ないでしょうか。 kent-webのは使いにくいのでやめました・・・ フレームページを正しく解析し、 一日の解析数を表示できて、 アクセス元のリモートホストやブラウザ、OS情報などが解析できて、設置はなるべく簡単・・・・・ なんて、都合の良いCGIなんてナイですかねぇ・・・

    • ベストアンサー
    • CGI
  • アクセスカウンタについて

    SSIのアクセスカウンタを使っているのですが、ezweb(au)などの携帯の場合、キャッシュ機能がディフォルトであるので、ちゃんとカウントされないんです。ブラウザ履歴クリアしない限り、何回入室しても初めの1回しかカウントされません。 そのため実際のアクセス数とは大きなずれが生じてしまいます。これを解消する方法はないのでしょうか?できればPHPなどは使わずにCGIかSSI(またはHTMLやHDMLなどのタグ)でうまく解消できる方法が知りたいです。 なにぶんパソコンを持ってからまだ1年もたっていないのであまり難しいことができないもので、ご教授お願いします。

    • 締切済み
    • CGI

専門家に質問してみよう