BBQ あらしお断りシステム を利用する
BBQ あらしお断りシステムは某巨大掲示板などのインターネット掲示板に採用されている公開プロキシのブラックリストです。
前述の掲示板をはじめ、個人経営の掲示板でも多く採用されています。
マクシモクブログ(Nucleus)でもブラックリストモジュールで使っていますし現在、独自設計中の掲示板(車輪の再発明)でも使っています。
で、PHPでの利用方法はこんな感じ。
IPを投げてTRUEが返ってきたらNGという感じで使います。
便利ですね。
で現在、そのBBQが利用できない状態(12/05~)となっています。
するとBBQを採用していた多くのサイト管理人が、
「たた大変だ!このままでは荒らしを抑えきれない!早く何とかしないと!」
という事で、独自にあらしお断りシステムを急造する事になります。
で、IPアドレスやHOSTネームを規制の判断基準とするのですが、IP管理だと管理コストが多く必要になってしまうので、結果的にHOSTネームでまる括り規制するという結論になります。
HOSTネームを得るためには、$_SERVER['REMOTE_HOST']やgethostbyaddr()をコールしてホスト情報を取ってきてもらうのですが、その結果プログラムを置いているサーバーから各ドメインのネームサーバーへの問い合わせが増えます。
多くのユーザーを詰め込んでいるレンタルサーバーでは、その影響は非常に大きなものとなります。私の利用しているxrea.comでもそうです。
その結果、なんということでしょう!?
gethostbyaddr()を1回コールするだけで5秒もかかってしまうという事態に!
2回コールで10秒。5回コールで25秒です。でも逆に考えれば、1回で済ませれば5秒で済むという事です。
NucleusなどのCMSを利用している場合は、本体・カウンター・掲示板・ブラックリストなどなど各モジュールがそれぞれgethostbyaddr()をコールします。
それに加えて急造されたあらしお断りシステムもgethostbyaddr()をコールします。
最悪の事態です=:[
出来合いのCMSの場合はそれぞれコールされているgethostbyaddr()をgrepして一本にまとめるのは非常にめんどうくさいです。
ですが幸いな事にマクシモクブログは放置中で、現在設計中の独自CMSなどでは対策をとる事が出来ました。
車輪の再発明も無駄じゃなかった:ase:
具体的な対策は、アプリケーションの頭でgethostbyaddr()を一度だけコールして、globalやサーバー変数で使いまわすだけです。簡単ですね。
心当たりのある方は対策してみてください。
前述の掲示板をはじめ、個人経営の掲示板でも多く採用されています。
マクシモクブログ(Nucleus)でもブラックリストモジュールで使っていますし現在、独自設計中の掲示板(車輪の再発明)でも使っています。
で、PHPでの利用方法はこんな感じ。
<?php
function check_proxy($ip, $check_proxy = 'false') {
$raddr = explode('.', $ip);
$query_addr = $raddr[3] . '.' . $raddr[2] . '.' .
$raddr[1] . '.' . $raddr[0] . '.niku.2ch.net';
if (gethostbyname($query_addr) == '127.0.0.2') {
$check_proxy = 'true';
}
return $check_proxy;
}
?>
IPを投げてTRUEが返ってきたらNGという感じで使います。
便利ですね。
で現在、そのBBQが利用できない状態(12/05~)となっています。
するとBBQを採用していた多くのサイト管理人が、
「たた大変だ!このままでは荒らしを抑えきれない!早く何とかしないと!」
という事で、独自にあらしお断りシステムを急造する事になります。
で、IPアドレスやHOSTネームを規制の判断基準とするのですが、IP管理だと管理コストが多く必要になってしまうので、結果的にHOSTネームでまる括り規制するという結論になります。
HOSTネームを得るためには、$_SERVER['REMOTE_HOST']やgethostbyaddr()をコールしてホスト情報を取ってきてもらうのですが、その結果プログラムを置いているサーバーから各ドメインのネームサーバーへの問い合わせが増えます。
多くのユーザーを詰め込んでいるレンタルサーバーでは、その影響は非常に大きなものとなります。私の利用しているxrea.comでもそうです。
その結果、なんということでしょう!?
gethostbyaddr()を1回コールするだけで5秒もかかってしまうという事態に!
2回コールで10秒。5回コールで25秒です。でも逆に考えれば、1回で済ませれば5秒で済むという事です。
NucleusなどのCMSを利用している場合は、本体・カウンター・掲示板・ブラックリストなどなど各モジュールがそれぞれgethostbyaddr()をコールします。
それに加えて急造されたあらしお断りシステムもgethostbyaddr()をコールします。
最悪の事態です=:[
出来合いのCMSの場合はそれぞれコールされているgethostbyaddr()をgrepして一本にまとめるのは非常にめんどうくさいです。
ですが幸いな事にマクシモクブログは放置中で、現在設計中の独自CMSなどでは対策をとる事が出来ました。
車輪の再発明も無駄じゃなかった:ase:
具体的な対策は、アプリケーションの頭でgethostbyaddr()を一度だけコールして、globalやサーバー変数で使いまわすだけです。簡単ですね。
心当たりのある方は対策してみてください。
[PR] 全てが規格外!しかも1年間の全額返金保証!! [PR]