▼スレッド
│
└◇904:Re:アクセス制限について [moon] 01/20 19:25
└◇907:Re[2]:アクセス制限について [さると] 01/21 02:16
└◇908:Re[3]:アクセス制限について [moon] 01/21 08:52
└◇909:Re[4]:アクセス制限について [さると] 01/21 10:17
└◇910:Re[5]:アクセス制限について [moon] 01/21 19:37
└◇911:Re[6]:アクセス制限について [さると] 01/21 21:40
└◇912:Re[7]:アクセス制限について [moon] 01/21 21:59
└◇913:Re[8]:アクセス制限について [moon] 01/21 22:02
└◇914:Re[9]:アクセス制限について [さると] 01/22 01:08
└◇915:Re[10]:アクセス制限について [moon] 01/22 08:57
└◇916:Re[11]:アクセス制限について [さると] 01/22 09:49<-last
> お聞きしたいのは、表題についてなのですが、デフォルトではID作成時にIPアドレスをチェックして、同一IPでは複数IDの作成を制限していますよねスレッド一覧
>
> ファイルロック機能がよくわかりませんが、特定のIPのみロックするのではなく、sos2.cgiそのものをロックするという理解で宜しいでしょうか?
# sos2.cgiで行われているホストアドレスによる制限のことでしたらファイルロックという表現は間違っています。
特定のホストアドレスからの新規登録が出来ないようにしているだけなのでsos2.cgiの実行自体は制限できません。
> 荒らし対策の為に、sos2.cgi本体に特定のIPからのアクセスのみを拒否するという改造は可能でしょうか?
> また、可能ならば方法をご教授願えませんか?
> 他の色々なCGIを参考に自分で挑戦してみたのですが、どうも機能しませんでしたので・・・
新規登録のみを指定した特定のホストアドレスから受け付けないようにすることは比較的簡単に出来ますが、sos2.cgiの実行自体が出来ないようにするのには.htaccessというファイルを作成すれば良いと思います。(書き方はWEBで調べればすぐに分かると思います。)
なお、.htaccessはサーバにより使用できないところもあるかと思いますのでそのあたりは注意が必要かもしれません。
> # sos2.cgiで行われているホストアドレスによる制限のことでしたらファイルロックという表現は間違っています。スレッド一覧
# ---------- LOCK FILE
$lockkey = 1; # ファイルのロック(Mkdir = 1,Symlink=2,No = 0)
$lockfile = './sos.lock'; # ロックファイル名&パス
この部分がファイルのロックなのはわかるのですが、何故か設定するとサーバが混雑していますとなってsos2.cgiが開けなくなります
てっきり本体にアクセス出来なくなるものと思っていましたが、設定をミスしていたみたいですね・・・
普通の制限の場合$dney = '***'といった形でホストを指定すると思うのですが、この機能はどうなっているのでしょうか?
初歩的な質問で申し訳ありません
> 特定のホストアドレスからの新規登録が出来ないようにしているだけなのでsos2.cgiの実行自体は制限できません。
> 新規登録のみを指定した特定のホストアドレスから受け付けないようにすることは比較的簡単に出来ますが、sos2.cgiの実行自体が出来ないようにするのには.htaccessというファイルを作成すれば良いと思います。(書き方はWEBで調べればすぐに分かると思います。)
> なお、.htaccessはサーバにより使用できないところもあるかと思いますのでそのあたりは注意が必要かもしれません。
サーバの説明を調べたところ、.htaccessは使えませんでした
新規登録のみを指定した〜〜というのは、上のsos2.cgi内で行われているホスト制限と同様のことでしょうか?
> # ---------- LOCK FILEスレッド一覧
> $lockkey = 1; # ファイルのロック(Mkdir = 1,Symlink=2,No = 0)
> $lockfile = './sos.lock'; # ロックファイル名&パス
>
> この部分がファイルのロックなのはわかるのですが、何故か設定するとサーバが混雑していますとなってsos2.cgiが開けなくなります
> てっきり本体にアクセス出来なくなるものと思っていましたが、設定をミスしていたみたいですね・・・
これはユーザファイルなどへの同時アクセスを防ぐための処理なのでホストによるアクセス制限ではありません。
パーミッションが怪しいので、まずはsos2.cgiのあるディレクトリのパーミッションに書き込み属性があるかを確認し無いなら付加する。
このディレクトリのパーミッションが問題無いようならsub lockの0755を0666、0766、0777などに変えて試してみるとうまくいくかもしれません。
> 普通の制限の場合$dney = '***'といった形でホストを指定すると思うのですが、この機能はどうなっているのでしょうか?
ホストアドレスと$dneyを比較して、$dneyに当てはまるホストアドレスならエラーメッセージを表示するとか別のページに飛ばすとかというようなかんじなのだろうと思います。
この方法は毎回判定するので負荷が高くなりがちになりますのでお勧めしません。
> 新規登録のみを指定した〜〜というのは、上のsos2.cgi内で行われているホスト制限と同様のことでしょうか?
その機能に上記だと「$dneyの処理」を追加して指定したホストアドレスからの新規登録を禁止するということです。
わかりやすい説明有難うございましたスレッド一覧
なんとなくですが仕組みが理解できた気がします
で、具体的に$dneyの処理を追加した場合
#アクセス制限
&get_host;
if ($deny) {
$flag=0;
foreach ( split(/\s+/, $deny) ) {
if ($host =~ /$_/i) { $flag=1; last; }
}
if ($flag) { &error("ただ今ご利用できません"); }
}
こんな感じになると思うのですが、どこを修正すれば機能するようになるでしょうか?
> で、具体的に$dneyの処理を追加した場合スレッド一覧
>
> #アクセス制限
> &get_host;
> if ($deny) {
> $flag=0;
> foreach ( split(/\s+/, $deny) ) {
> if ($host =~ /$_/i) { $flag=1; last; }
> }
> if ($flag) { &error("ただ今ご利用できません"); }
> }
>
> こんな感じになると思うのですが、どこを修正すれば機能するようになるでしょうか?
$denyを定義すれば問題無く動作すると思います。
$denyの書き方は、host.example.ne.jpと192.168.0.1を含むホストアドレスを拒否する場合は'host\.example\.ne\.jp 192\.168\.0\.1'と書けば良いです。
要するに拒否したいホストアドレスのリストを空白で区切って書けば良いだけです。(正規表現で判定するのでそのあたりは書き方に注意)
> $denyを定義すれば問題無く動作すると思います。スレッド一覧
> $denyの書き方は、host.example.ne.jpと192.168.0.1を含むホストアドレスを拒否する場合は'host\.example\.ne\.jp 192\.168\.0\.1'と書けば良いです。
ID作成時に記録されるIPアドレスは**.**.**.と数字が3つまでしかなくて、最後の1つがありませんよね
このせいなのかわかりませんが、指定しても機能していないようなのです
パールチェックではsyntax OKとなっていますので、スクリプトそのものは間違ってないと思うのですが、他にも修正を加える部分があるのでしょうか?
追加したのは以下の2つだけです
#拒否するホスト
$deny = ''
#アクセス制限
以下省略
> ID作成時に記録されるIPアドレスは**.**.**.と数字が3つまでしかなくて、最後の1つがありませんよねスレッド一覧
そうでしたね。
そうするとhost.example.ne.jpなどのようにIPではない場合は先に書いたそのままで良いですがIPアドレスの場合は先頭の3つまでで192\.168\.0\.のように書かないと正常に機能しないということになります。
> このせいなのかわかりませんが、指定しても機能していないようなのです
> パールチェックではsyntax OKとなっていますので、スクリプトそのものは間違ってないと思うのですが、他にも修正を加える部分があるのでしょうか?
> 追加したのは以下の2つだけです
>
> #拒否するホスト
> $deny = ''
>
> #アクセス制限
> 以下省略
これだけで大丈夫だと思います。(''の後に;が無いのは写しミスだと思いますし)
とりあえずローカルテストで$deny = '.';として「ただ今ご利用できません」と表示されるか確認してこれが正常なら次に$deny = '127\.0\.0\.1 localhost';として同じメッセージが表示されるか試してみてください。
> '127\.0\.0\.1 localhost'スレッド一覧
同じ間違いを・・・。
'127\.0\.0\. localhost'です。
ローカルテストしてみましたが、'.''127\.0\.0\. localhost'どちらも普通にアクセスできてしまいましたスレッド一覧
これはやはり機能していないということですよねぇ・・・
何故なんでしょう?
> ローカルテストしてみましたが、'.''127\.0\.0\. localhost'どちらも普通にアクセスできてしまいましたスレッド一覧
>
> これはやはり機能していないということですよねぇ・・・
>
> 何故なんでしょう?
追加した場所が悪いのではないですか?
&decode;の上(つまり一番最初の処理)あたりですよ。
> 追加した場所が悪いのではないですか?スレッド一覧
> &decode;の上(つまり一番最初の処理)あたりですよ。
メインプログラムの下に追加してました・・・
失礼しました
無事機能するようになりました
有難うございました
またよろしくお願いします