・他者のサーバーなので、プログラム(PHP)で実現したい
・指定する間隔は秒(大きくても1分程度)
・アクセスが指定間隔内にあった場合も拒否せずに待たせてすべてのアクセスを許可したい
「ファイルにアクセス日時を保存+ファイルロック」
のような方法で出来そうな気がするのですが、何かいい方法はないでしょうか?
Apacheを使っているのであれば
mod_bwshareによる接続数/帯域制限のはどうでしょう。
http://www.atmarkit.co.jp/flinux/rensai/apache2_08/apache08c.htm...
こんな雰囲気でしょうか。
このテキストエリア内で書いたので、typoあるかも知れないし、そもそも勘違いしてるかも知れないです…。
ホストで制限したかったら、ADDRを取得してるあたりでgethostbyaddrしてやればOKかと思います
<?php define('LOGFILE', 'access.txt'); define('SLEEP_TIME', 60); $bad_addr = array('127.0.0.1', '192.168.0.1'); if(file_exists(LOGFILE) && $buf = file_get_contents(LOGFILE)){ if(in_array($_SERVER['REMOTE_ADDR'], $bad_addr)){ $bad = unserialize($buf); if(isset($bad[$_SERVER['REMOTE_ADDR']]) && time()-$bad[$_SERVER['REMOTE_ADDR']] < SLEEP_TIME){ sleep(SLEEP_TIME); } else { $bad[$_SERVER['REMOTE_ADDR']] = time(); } file_put_contents(LOGFILE, serialize($bad)); } } ?>
コメント(0件)