よたか2010.11.10 01:47:54
最近サーバーが遅いぞーって「使えるねっと」のサポートに連絡したら、特定のサイトの「特定のページ」にスパムコメントされている事がわかった。
わざわざ調べてくれてありがとう。
で、さっそくアクセス禁止処置をとらないと行けないのだけど、
100メガ以上のログファイルからIPを探すなんてゾッとしてしまう。でもやらないと…。
そこで、いくつか方法を考えた。
今回はなぜか、アクセス対象ページが限られているので、ちょっとやりやすいかも。
とりあえず、対象ページを削除して、おなじ内容のページを違う名前で生成しておいた。
これで、通常のユーザーからは問題ないはず。
特に今回は、大きな問題ないページだったし。
さて、どうしよう。
方法1)リダイレクトして他のページに飛ばす
.htaccess にRedirect 書くのは良いとして、どこに飛ばす?Google? Yahoo? いや、そんな迷惑な事しちゃいかんだろ。
ブラウザクラッシャーのありそうなアダルトサイト?これもなんだかなぁ。
結局飛ばす先が決まらずに断念。
方法2)軽いページを準備してさっさと引き上げてもらう。
解決している訳ではないけど、なんにもない書き込んでいないファイルにアクセスさせればとりあえず負荷は軽減できそう。
とりあえずこれで急場を凌いだ。
方法3)アクセス元のIPを抜くPHPを書いて後から一気にブロックする。
あぁ、なんかこれが一番現実的かも。
とりあえず、さっくりと書いて、DBに保存させておく。
すごいや、書いた側らかデータが溜まって行きます。
適当に溜まったら、こんな感じで書き出して、.htaccessに書き込めばよさそう。
deny from 000.000.000.000
いや、いっその事、http.confとかに直書きした方が良いかも知れません。
ちなみに今回使ったソースは下記の通りです。ライセンスは放棄しましたので、使いたい方どうぞご自由にお使いください。
DBの方はソースから適当に想像して設定しちゃってください。
<?php
$date = $_SERVER["REQUEST_TIME"];
$uri = $_SERVER["REQUEST_URI"];
$ip = $_SERVER["REMOTE_ADDR"];
$post = implode(',',$_POST);
$sqlcom = new SQL_COM;
$sqlcom -> sql_update($date,$uri,$ip,$post);
class SQL_COM{
function sql_set(){
$r['id'] = 'データベースのユーザー名';
$r['pass'] = 'データベースのパスワード';
$r['db'] = 'データベース名';
$r['host'] = 'データベースサーバー名';
return $r;
}
function sql_connect(){
$s = $this -> sql_set();
if($mysql = mysql_pconnect($s['host'],$s['id'],$s['pass'])){
return $mysql;
}
}
function sql_update($date,$uri,$ip,$post){
$mysql = $this -> sql_connect();
mysql_select_db('spamBlock',$mysql);
mysql_query(" INSERT INTO `ip_address`(`date`,`ip`,`uri`,`post`) VALUES ('".$date."','".$ip."','".$uri."','".$post."');",$mysql);
}
}
?>