私設SoS2オーナー応援BBS

新規発言一覧最新記事過去一覧検索ダウンロードページHOME

スレッド

└◇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


908● Re[3]:アクセス制限について[ moon ] 2004 01/21 08:52
> # ---------- 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の処理」を追加して指定したホストアドレスからの新規登録を禁止するということです。
スレッド一覧


909● Re[4]:アクセス制限について[ さると ] 2004 01/21 10:17
わかりやすい説明有難うございました
なんとなくですが仕組みが理解できた気がします

で、具体的に$dneyの処理を追加した場合

#アクセス制限
    &get_host;
    if ($deny) {
        $flag=0;
        foreach ( split(/\s+/, $deny) ) {
            if ($host =~ /$_/i) { $flag=1; last; }
        }
        if ($flag) { &error("ただ今ご利用できません"); }
    }

こんな感じになると思うのですが、どこを修正すれば機能するようになるでしょうか?
スレッド一覧


910● Re[5]:アクセス制限について[ moon ] 2004 01/21 19:37
> で、具体的に$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'と書けば良いです。
要するに拒否したいホストアドレスのリストを空白で区切って書けば良いだけです。(正規表現で判定するのでそのあたりは書き方に注意)
スレッド一覧


911● Re[6]:アクセス制限について[ さると ] 2004 01/21 21:40
> $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 = ''

#アクセス制限
以下省略
スレッド一覧


912● Re[7]:アクセス制限について[ moon ] 2004 01/21 21:59
> 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';として同じメッセージが表示されるか試してみてください。
スレッド一覧


913● Re[8]:アクセス制限について[ moon ] 2004 01/21 22:02
> '127\.0\.0\.1 localhost'

同じ間違いを・・・。
'127\.0\.0\. localhost'です。
スレッド一覧


914● Re[9]:アクセス制限について[ さると ] 2004 01/22 01:08
ローカルテストしてみましたが、'.''127\.0\.0\. localhost'どちらも普通にアクセスできてしまいました

これはやはり機能していないということですよねぇ・・・

何故なんでしょう?
スレッド一覧


915● Re[10]:アクセス制限について[ moon ] 2004 01/22 08:57
> ローカルテストしてみましたが、'.''127\.0\.0\. localhost'どちらも普通にアクセスできてしまいました
>
> これはやはり機能していないということですよねぇ・・・
>
> 何故なんでしょう?

追加した場所が悪いのではないですか?
&decode;の上(つまり一番最初の処理)あたりですよ。
スレッド一覧


916● Re[11]:アクセス制限について[ さると ] 2004 01/22 09:49
> 追加した場所が悪いのではないですか?
> &decode;の上(つまり一番最初の処理)あたりですよ。

メインプログラムの下に追加してました・・・
失礼しました

無事機能するようになりました
有難うございました

またよろしくお願いします
スレッド一覧

CGIROOM