こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

アクセス制限

htmlにアクセスした時に、scriptでcgiを実行してます。
その時に、cgiのほうである条件になった場合にアクセス制限をかけたいのですが
cgiは完成していて、後は、アクセス制限をどのようにしてかけるのか悩んでます。
制限は、IPで行いたいです。
cgi単体ではなんの問題もないのですが、html経由なので少し違うのでしようね。
よろしくお願いいたします。

投稿日時 - 2018-06-02 13:47:57

QNo.9504383

困ってます

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

そういうことならページ遷移の制御だけできればよいので
アクセス制限やユーザー認証でなく、
セッションまたは cookieでページ遷移をチェックするのが簡単でしょう。

perlでのセッション管理はちょっと面倒なんですが
ページ番号だけの小さいデータなのでcookieでいけるんじゃないですかね。
つまり、どのページまで進んだかをブラウザのcookieデータに入れておいて、
perlの $ENV{'HTTP_COOKIE'}からそれを取り出して、
現ページが前ページ+1 になっているかをチェックするって感じです。
(詳しくはperlでのcookieの出し入れ方法を検索されて下さい)

なお、formのpostデータとして、ページごとに異なるhidden値をいれておいて、
前ページが正しいかをチェックするという方法もありますが
これだとブラウザの戻るボタンで同じページを
繰り返していることが発見できません。

投稿日時 - 2018-06-04 08:07:18

お礼

長々とお付き合い頂き感謝致します。
クッキーも考えたのですが、無視する人には罰として制限をかけたかったのですが
でも現実的には、クッキーのほうが良いですね。
その方向で検討したいと思います、ありがとうございました。

投稿日時 - 2018-06-04 09:49:27

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

受付用CGIのperlで、$ENV{'REMOTE_ADDR'} でクライアントのIPを取得して、
それを利用者用CGIの置いてあるディレクトリの .htaccessに
allow from {IPアドレス}
で追記しているということですかね。
IPアドレスで 制限をかけるという方針が確定であるなら、
そのやり方自体には問題ありません。

ただ、アクセス制限というのが、ユーザーを認識のためで
それにIPアドレスを使うということであるなら、その考え方自体には、問題があります。
というのは、ユーザー個別にIPアドレスが紐付いている訳ではなく
通常のプロバイダだと、時間がたてばIPアドレスは変化しますし、
また、ルーターで複数端末を共有していると異なるユーザーが同じIPアドレスになります。
(多くのWiMAXのようにグローバルアドレスを持たないNAPT型だと、これが顕著になります)

つまり、プロバイダと固定IPアドレスを契約しているユーザーでしか
IPアドレスを使ったアクセス制限は有効な方法にしかなりません。
 (それ以外のケースだと、許可していないユーザーにもアクセスを許しまったり
 許可したユーザーがアクセスできない というトラブルがおきえます)

ブログへのスパムコメントを防止するため、海外のIPアドレスをまとめてブロックする
というようなことであれば、別ですけど
ユーザー認識のためなら、アカウント認証(IP+パスワード)を使うのが通常でしょう。
つまり、なんのためにIPアドレスでアクセス制限を使うのかの その理由次第です。

投稿日時 - 2018-06-03 17:14:55

補足

大変勉強になりました。
お世話ついでに書きますが、
IPだけでは個人を限定出来ないと言うことはわかりました。
特にIPにこだわっているわけではないです、私の勉強不足でそうしているだけです。
厳密には個人を特定するには、アカウント認証しかないでしょうか。

私が何をしたいのか、全体像を簡単に書きます。
問題が5問存在していて、ページが5ページ存在してます。
当然問題なので、順番にしか挑戦出来ません。
挑戦者が、順番に挑戦していれば、何にメッセージも表示されません。
内部的には、ipを保存しています。

途中のアドレスを例えば3問目のアドレスをネットに書き込んだ人がいた場合、
いきなり、3問目のアドレスをみにきます、当然順番に挑戦してないので
それを判定して、メッセージを表示します。
それを複数行った人は、アクセス制限をします。

と言った事をしたいのです、
これは現実的な事をやろうとしているのか無謀な事をやろうとしているのか
現在は、テスト段階なので、実際に稼働しているわけではないです。

アドバイス頂ければ幸いです、よろしくお願いいたします。

投稿日時 - 2018-06-04 00:08:06

ANo.1

どんな言語のCGIなのかが不明ですが、一般論としては、
Webサーバー側で実行されるCGIでは、環境変数REMOTE_ADDRに
クライアントのIPアドレスがセットされているので、それを使って条件分岐するように
CGIをプログラミングすれば よいことになります。
(CGIの全体をアクセス制限するのなら Webサーバーの設定でアクセス制限すれば
 よいのですが、CGIの一部の機能だけをIPアドレスで制限かけたいなら
 プログラム側でそのように対応するしかありません)

ただ、HTMLのscript ってクライアント側(ブラウザ)での実行なので、
サーバー側のCGIを実行することはできませんので、
言われているのは、CGIじゃなくて、JavaScriptのことではないですか?
それとも、Ajaxを使ってサーバーのCGIを実行してるという意味でしょうか?

投稿日時 - 2018-06-02 17:11:56

補足

分かりにくい表現だったらすみません。
すべて独学の知識ですので至らない質問内容かもしれないです。
cgiは、perlで作成しています。
あれから色々調べて分からなかったもので
現状では、perlでipを取得して、htaccessの直接書き込みしてアクセス制限をかけてます。
自分では邪道ではないのか、他に正当なやり方があるのかお聞きしたいです。
よろしくお願いいたします。

投稿日時 - 2018-06-03 09:20:06

あなたにオススメの質問