特定のホストからのアクセスをある間隔でしかアクセスできないように規制することはできないでしょうか?あるホストからのアクセスが頻繁にあるのでそれを緩和したいのです。


・他者のサーバーなので、プログラム(PHP)で実現したい
・指定する間隔は秒(大きくても1分程度)
・アクセスが指定間隔内にあった場合も拒否せずに待たせてすべてのアクセスを許可したい

「ファイルにアクセス日時を保存+ファイルロック」

のような方法で出来そうな気がするのですが、何かいい方法はないでしょうか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2006/07/03 16:00:06
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:kurukuru-neko No.1

回答回数1844ベストアンサー獲得回数155

ポイント35pt

Apacheを使っているのであれば

mod_bwshareによる接続数/帯域制限のはどうでしょう。

http://www.atmarkit.co.jp/flinux/rensai/apache2_08/apache08c.htm...

id:riaf No.2

回答回数13ベストアンサー獲得回数0

ポイント35pt

こんな雰囲気でしょうか。

このテキストエリア内で書いたので、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) &amp;&amp; $buf = file_get_contents(LOGFILE)){
	if(in_array($_SERVER['REMOTE_ADDR'], $bad_addr)){
		$bad = unserialize($buf);
		if(isset($bad[$_SERVER['REMOTE_ADDR']]) &amp;&amp; time()-$bad[$_SERVER['REMOTE_ADDR']] < SLEEP_TIME){
			sleep(SLEEP_TIME);
		} else {
			$bad[$_SERVER['REMOTE_ADDR']] = time();
		}
		file_put_contents(LOGFILE, serialize($bad));
	}
}
?>

http://jp.php.net/gethostbyaddr

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません