人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

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

●質問者: k2017
●カテゴリ:ウェブ制作
✍キーワード:PHP アクセス サーバー ファイル プログラム
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kurukuru-neko
●35ポイント

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

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

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


2 ● riaf
●35ポイント

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

このテキストエリア内で書いたので、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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ