カテゴリ: "b2evolution"
XML RPCサーバをPHPで実現する方法について記載されていた。
外部コマンドを複数openして、pipeで繋いで、終了したかどうか、ループを回して、全部終了したら抜ける。
ま、それだけだけど、pingの例のように、なんちゃって並列にしたい場合には、有効かもしれない。
ループで終了を待たない、という方法もあって
PHPで非同期DNSレゾルバのように、tickを使うのがいいかも。でも、PHP 5.3.0でtickは非推奨になっている。
後者の場合は、画面のレスポンスには、ジョブ投入成功・不成功だけ返しておいて、ログに結果を残す作戦になる。
pingの実装を拡張してみたが、うまく動くか、大変心配である。
とくにタイムアウトする可能性について、テストが必要である。
そんなにやたらとPingをするのが、はやりなのか?
よくわからんのである。
XML-RPCのpingの仕様も拡張されつつあるようではある。
pingを有効に使う実験として、相手にpingoo!というサービスに登録してみた。
b2evolutionには、generic ping pluginというプラグインがあり、容易にping先を登録できる。
ただ、人気ブログランキングのように、pingといいつつ、リンクボタンをおくようなスタイル(厳密には、pingではないような)ものもあるので、言葉に注意が必要だ。
Pingを受け付けるサーバの一覧をまとめている人がいた。
b2evolutionのプラグインとして、日本の主要PingサーバにPingをとばすPing-O-maticぽいのを作りたいとおもうので、参考にする。
だんだん、自分で考える余裕がなくなってきて、ほぼ、そのまま利用させてもらっている日本語の対応
この内容をうまく原作者に伝えて、原作者が改善するのが望ましいのであるが。
ということで、お世話になってばっかりでは申し訳ないので、日本語メッセージの翻訳をやってみた。全部ではないが、おおよそ何となくできているなぁ、ってくらいには翻訳を進めた。
参考になれば幸いである
サイトのソフトウエアバージョンアップに伴って、スキンも変えてみました。
b2evolutionを採用していますが、あまりたくさん、気に入ったスキンがないのは、日本人のデザインできる人で、本ソフトウエアを使っている人が少ないということなんでしょうね。
b2evolution(ブログツール)と、Firefoxブラウザの拡張機能のscribeFireを使うと、ブラウザで様々なページ閲覧中にすぐにステータスバー(Firefoxのウインドウの一番下)のアイコンをクリックすることで、ブログを書き始めることができる。
この記事は、その設定方法を示したものだ。
残念ながら、フランス語だが、設定方法は容易にわかる。
1. マニュアル設定を選択
2. ブログの種類で個人ブログを選択
3. APIのタイプを metaweblog APIを選択、URLには、http://blogのURL/xmlsrv/xmlrpc.phpを入力
4. ログインパスワードを入力。
これだけのようだ(が、私の環境は正常に動作しなかった。なぜ?)
ぜんぜんブログを更新していないが、クリスマスの季節になったので、skinだけ変えてごまかしてみる。
ソフトウエアのアップデートもついでに行ってみた。
ちょっとWYSIWYGが気になって、b2evolutionにWYSIWYGプラグインのTinyMCEプラグインを追加。
ただし、動作がやっぱり重くなる。
メインラインにマージできないのかなぁ。
http://cha.s57.xrea.com/blogs/index.php/2006/12/03/p83#more83
ま、これで嫁の不満も少しは解消するでしょう。
先日、b2evolutionのバージョンアップとサーバ移行したが、b2evolutionの最新を使ったせいなのか、localizeされた言語ファイルが導入されていない。
そのため、家族から不満が噴出。とりあえずで、古いバージョンから言語ファイルを取得して、多少追加して対処した。
www.da-cha.jp についても、移行開始。新しいモジュールも導入した。blogやforum, calendarやwebmail機能も導入してみた。
今後、www.da-cha.orgにある古いコンテンツは、www.da-cha.jpのdrupal上で管理すべく移行していく。
サーバ更新に伴ってb2evolutionのバージョンアップを行いました。
管理デザインも一新され、つかいやあすくなったとおもいます。
とくに、visibilityの制御やcommentの制御ができるのが助かります。
モブログ機能については、おいおい検討します。
最近、Ploneでホストされているサイトへのリンクを含むコメントスパムが多い。なぜかと、首をひねっていたら、どうやら手法が公開されていた。
This is an old, old vulnerability that only exists in the Plone 2.0.x series.
It was fixed over a year ago, and the site in question is running a version of Plone that is between 18 and 24 months old as of August 2006.
Not much we can do about people that don't update their sites and stay current on security, unfortunately. If you try your JS redirection trick on any current Plone version (2.1, 2.5), you'll see that it doesn't work.
このコメントにあるように、古いPloneの脆弱性を使ったやり口のようである。
ploneをおつかいのみなさん、くれぐれも寄生SEOの踏台にならないよう、管理(つまりバージョンアップ)をしっかりしてくださいね。
たとえば、Cleveland Area Python Interest Groupさんのように、善良と思われるサイトのリンクも私のところに来ています。その手でどこかにjavascriptでリダイレクトするようなページを埋め込まれているのでは無いかと思われます。
- www.zopeuk.org
- sprint.zope.it
- sp2000europa.org
- kaon.semanticweb.org
- marineconservation.duke.edu
- cvp.icsi.berkeley.edu
- www.cumv.cornell.edu
あたりは同様の被害にあっているものと考えられます。
先日、実装したコメントキーによるTrackback SPAM撃退法のVer.2を実装。これでほぼ完璧になった。
前回の実装では、コメントキーは、素直に日付 yymmdd
になっていた。これはメインストリームに入れた場合には、SPAMMERは容易にkeyを推測可能であり、サイトを参照することなしに、Trackback SPAMの送出が可能になる。
そこで、各サイトごとに管理者の設定するsalt値を使うことと、記事ごとに異なるcomment keyを付与することで、外部からはcomment keyの推測が不可能になるよう改良した。この値は12時間ごとに切り替わる6文字とした。
b2evolutionには、blogs/htsrv/getmail.phpに、プリミティブなメールからのポスト機能があるが、
- 国際化されていない
- cronからwgetするなどして定期的な起動が必要
- 写真などのマルチメディアに未対応
と、非常に制限がきつかった。
また、
- PHPの基本機能である imapアクセス関数を使っていない
- PEARの機能も使っていない
というように、古いPHPでの自前実装をひきづっている。
そこで、大幅に実装を見直し、国際化されたprocmailからも起動可能なマルチメディア対応モブログ機能を開発した。
本機能を利用するためには、
- 3つのファイルの設置いれかえ
- blogs/conf/_advanced.phpの設定
が必要である。
以前、comment keyによるspam排除について書いた。
実際に、本blogのtrackbackに実装してみた。
本blogのトラックバックIDはとても長いと思う。それは、最初の6桁がgmdate("dmy")の値となっているから。
これがcomment keyになっている。日付をつかっているので、IDは毎日かわる。 検索エンジンが持って行くコンテンツでは、このIDがクロールした日あるいは、キャッシュを生成した日になる。trackbackのこの6桁とその時間のkeyを比較して、違う場合は受け取らない。
制限事項として、キャッシュをユーザに見せた場合、comment keyが異なる可能性があって、トラックバックを受け取れないことがあるということか。このキーは一日一回しか変わらないんで、毎日キャッシュを生成しなおせば、問題ない。
コードを改変してから8時間で、かなりの数のcomment spamを門前払いできているようだ。
これは、google やyahooの検索結果をつかって、trackback spamを送っていると云うことであり、google や yahooの結果と実際のtrackback IDが違うようにすることで、効果を十分に上げられるという証拠になっている。
変更点は、また明日に。
本サイトでも活用しているSpamDeluxe機能を強化して、閾値以上のトラックバック・コメントが来た場合には、コメントを自動的にdeprecatedにフラグ付けし、スパムの可能性のあるドメインとして管理した上で、最近のコメント一覧への表示をしない、というロジックにしました。
エセキャプチャ機能、ポテンシャルスパマー自動検出機能、自動deprecate機能の組合せで、この1週間にくるコメントスパム・トラックバックスパム・abuseのうち、10件程度がすり抜けただけで、対処できました。
大垣さんのところでは2500件もきて、大変そうですが。
antispam機能がメモリを圧迫する話の解決策。
これはとりあえずのdirty hackです。
b2evolutionの0.9.2に含まれているantispam listのフィルター機能をそれ以前のバージョンにバックポートするか、バージョン0.9.2に対して変更を加えることが前提だ。
admin/b2antispam.phpの550行目付近。
<?php list_antiSpam($filteron); ?>
を削除し、
b2evolutionでspam排除機能のblacklist管理のところで、エラーになる。
Fatal error: Allowed memory size of nn bytes exhausted (tried to allocate n bytes) in ほにゃらら
こういうときは、phpの設定を変更する、以下のようなのを入れておくと
いいかもしれない。
/* Uncomment this line to attempt to use a higher memory limit */
ini_set("memory_limit", "12M");
でも、根本的にプログラムに問題がある、と考えた方がいい。メモリをそんなに使うのは、どうしてか。今回の場合は、すごく大きなblacklistのデータをSQLでカウントしているので、そこが怪しい。
abuse撃退のために、日付に紐付けたmd5 hashをつかって、その日に表示したフォームから投稿されたかを判定するというもの。
なるほど。
これは、tDiary用だが、b2evolutionにも応用できそうだ。
大垣さんとおしゃべりしたときに、えせキャプチャシステムについてのアイディアをいただいたので、早速(といっても、あれから一ヶ月くらいたっていますが)実装しました。
実装イメージは、本記事にコメントをするリンクを押してみてください。
本ブログサイトでも使っているb2evolutionの新バージョンがリリースされた。このリリースで、0.9系のリリースは最後となり、バグフィックスも入らない予定。今後は、次のメジャーバージョン1.8 "Phoenix"がリリースし、メンテナンスされていくことになる。
b2evolutionは、本サイトを構築するために利用しているブログエンジンですが、昨今のSPAMの多さに閉口して、改良を加えてみました。
AntiSpam Deluxeで紹介されているパッチを、昨年末に最新の安定版に移植したのですが、さらに基本のAntiSPAM機能と統合して、操作性をあげてみました。
このAntiSpam Deluxeの基本思想について紹介します。blacklist一本ではなくて、blacklist, whitelist, potential spam listの3本で管理します。リファラやコメントがあったときに、blacklist, whitelistと比較します。ヒットすれば拒否か、承認となります。どちらでもないときには、Potential リストに登録します。
適時、管理者がAntiSpam機能を利用したときに、Potentialリストをチェックして、white/blackの色分けをする、というわけです。
自動kick機能もあって、管理者がwhiteに振り分ける前に、事前に設定したカウントだけアクセスやコメントがあった場合には、そのURLを自動的にblacklistに登録する、という機能もあります。
本ブログで採用しているblogエンジンのb2evolutionだが、POP3からメールを取得して、記事投稿ができるというインターフェースがついている。
そこで、試してみたら、うーん。latinではうまくいくが、日本語は文字コードの処理が全くされておらず、うまくいかない。
かなり直すところがありそうだ。
また、写真などを貼付してのブログがはやっているが、コードを見たところ、そんな機能もない。
b2evolution 0.9.1で、infoseek.co.jpやsearch.goo.ne.jpから飛んでくるリファラーの場合、検索キーワードをうまく抽出できない。統計情報を管理ページから参照したときに、検索キーワードが見付からない、という警告が出る。
そこで、b2evolutionの、'blogs/b2evocore/_functions_hitlogs.php'の488行付近を以下のようにすると、これに対応できる。
if( $param_parts[0] == 'q' or $param_parts[0] == 'query' or $param_parts[0] == 'p' or $param_parts[0] == 'kw' or $param_parts[0] == 'qs' or $param_parts[0] == 'MT' or $param_parts[0] == 'qt')
これだけ。追加したのは、MTとqtの2つのキーワード。
コメントやトラックバックへのスパムが、現実にどうなのか、最近のコメントを管理画面から見たいことが多々あった。
これは_menutop.phpを直せばいいのかな。
ということで、ちょっと作業。トップに、
スタイル: V·D·L • ログアウト • ブログに抜ける
とあるのを
スタイル: V·D·L • ログアウト • 最近のコメント • ブログに抜ける
とするだけ。
admin/_menutop.phpの171行目付近に
•
<a href="<?php echo $htsrv_url ?>/login.php?action=logout"><?php echo T_('Logout') ?></a>
•
<a href="<?php echo $baseurl ?>/index.php?disp=comments"><?php echo T_('Last comments') ?></a>
•
<a href="<?php echo $baseurl ?>"><?php echo T_('Exit to blogs') ?> <img src="img/close.gif" width="14" height="14" class="top" alt="" title="<?php echo T_('Exit to blogs') ?>" /></a><br />
</div>
こんな感じの変更で良いはずです。
パッチファイルは、この変更のパッチのリンクから取得できます。
Search Engine向けには、mod_rewriteを使って、generateした静的なページに誘導するようにしています。
しかしながら、b2evolutionでは、最新ページだけキャッシュするようになっていて、過去のコンテンツはgenerateするように設計されています。
大垣さんは、つぎのように指摘しています。
例えば、あるロボットは3000年のエントリくらいまで検索していってくれます。当然役立つ情報はなく「申し訳ありません。表示する投稿がありません...」と表示されるだけです。アクセス統計情報、SEO的にも問題ではないかと思います。
データベースと連動したサイトを構築する場合にはロボットによる無限検索のリスクを考えないとならないです。データベースにも検索エンジンにも優しいカレンダーナビゲーションにするにはデータベースに新たなエントリ追加があった場合にナビゲーション用データをキャッシュする仕組みにすると良いと思います。
ご指摘のようにするには、最新、つまりトップURLだけでなく、日付ごとに過去のコンテンツについても静的ファイルを生成するような仕掛け作りが必要です。
静的ファイルを生成するタイミングは、コンテンツの新規作成・変更のタイミングか、バッチ処理によって、日次などの処理が必要です。
一つ困るのは、もっているIDによって、見えるコンテンツを切り替えるようなb2evolutionのような作りでは、静的ページは、なにか一つのIDで代表させるほか方法がないことです。また、どこまでのバリエーションを静的に見せるか、という工夫も必要です。
妥当な範囲としては、
- カレンダーからは未来へのリンクを削除しておく。
- カテゴリごとに最新コンテンツの静的ページを作成しておく。
- 最新コンテンツからは、当月コンテンツの静的ページを参照させるが、それ以上はすべて動的ページ生成でOKとする。
くらいになるのでしょうか。
tDiaryでは、サーチエンジン対策として、日付ごとの静的ファイルへの誘導も容易にできるようです。
久々に、Atom Validatorのクリックをしてみたら、Atom 0.3はObsoleteになってAtom 1.0になったとある。
学習ついでにMoving from Atom 0.3 to 1.0をみて、ちょっと手直ししてみた。ものの1時間ほどで違いを理解して、変更できた。
ふと、b2evolutionのforumを見てみたら、、、すでにCVSのリポジトリ上では対応したあとだった。(^^;;
ま、Atomを理解できたと言うことでよしとしよう。
わたしのパッチもダウンロードできる。ぱっと見たところ、直し方は全く同じだとおもうので、Forumでもパッチでも好きな方を使うと良いと思う。
また、B2evolutionのVersion.1.6(alpha) PhoenixでもすでにAtom1.0対応が入っている。
AntiSpamDeluxeとは、このサイトで使っているBlogソフト b2evolutionのAntiSpam機能を強化するハックである。
オリジナルの対応バージョンは、0.9.0.11であったので、これを現行安定版の0.9.1に移植強化してみました。
日本語環境でこれを使ってみたい方は、大垣さんのblogを参照して、日本語対応パッチを当てるのを忘れないようにしましょう。
導入をするためには、次の作業を行います。
1. これから変更するファイルのバックアップをとります。
conf/_advanced.php
b2evocore/_functions_antispam.php
b2evocore/_functions_hitlog.php
admin/_menutop.php
2. データベースに追加のテーブルを作成します。
接頭辞のevoは各自の設定にあわせ変更します。(デフォルトはevoです)
create table evo_potential (ID integer(4) auto_increment,theUrl varchar(250),primary key(ID));
create table evo_authorised (ID integer(4) auto_increment,theUrl varchar(250),logvisits char(1),primary key(ID));
3. パッチを当てます。
AntiSpamDeluxe patchをダウンロードし、以下のコマンドでコードの変更をします。
$ cd b2evolution
$ zcat antispamdeluxe.diff.gz|patch -p1
4 管理画面
管理画面を開くと、"Deluxe Antispam"というタブがあり、これを開くと、5つの設定項目、Potential Spammerの表、Authorisedの表が見えます。
4.1 設定項目
(1) Enable - 本拡張を有効にします。デフォルトは無効です。無効でも従来のAntispam機能はそのまま有効です。
(2) Auto Clean - Threashold条件を満たしたコメントを自動的にはじきます。
(3) Check Comment - コメント欄に埋め込まれたURLやトラックバック元のURLを、既存のコメントに含まれているかもチェックします。
(4) Threashold - 同じURLがこの設定回数をこえてトラックバックやコメントで送られてきた場合に、SPAMと判定します。
(5) Auto Report - 拒否(Ban)するときに、b2evolutionの中央ブラックリストに報告を自動的に行います。
4.2 Potential Spammer表
この表には、Authorisedの掲載されておらず、spam排除のブラックリストにもない、もしかしたらSpamのコメントやトラックバックのURLの一覧です。
"ban"をチェックすることで排除できます。"Auth"をチェックすることで、次に説明するAuthorized表に追加されます。
4.3 Authorized 表
Spamではないと認定されたURLが入っています。4.2のPotential表でチェックすることでここに入ります。
5. 設定
まず、Enableをチェックし、Threasholdに5を入れて、Update Recordsボタンをクリックします。「ブログに抜ける」をクリックして、また管理画面に戻ってきてみてください。
自分のドメインが、Potential Spammers表に追加されていることが分かると思います。
続いて、"auth"にチェックして、updateしてみましょう。今度は、Authrised表に移動したはずです。
同様に、いくつか他のサイトで自分のブログにリンクされているページからたどってくると、他のサイトがPotentialに追加されることがわかるとおもいます。
しばらく、その状態で運用します。Potential表には、自分のBlogをリンクしてくれているサイトが蓄積されています。これをAuthに入れておきましょう。
もし、SPAMのサイトが合った場合は、banにチェックすることで、このURLを含むコメントやトラックバックを削除できます。また、このURLはブラックリストに追加されます。
"Auto Clean"を使うときは注意しましょう。たとえば、人気のある大きなblogサイトから沢山のトラックバックを受け取る可能性がある場合に、管理画面で"Auth"にチェックする前に、spam判定しコメントを削除してしまいます。
なぜか、white listに入れているURLもリファラースパムに認定される現象が。
mysql> select aspm_ID, aspm_string FROM evo_antispam where 'http://mixi.jp/home.pl' like CONCAT('%',aspm_string,'%') LIMIT 0, 1;
+---------+-------------+
| aspm_ID | aspm_string |
+---------+-------------+
| 4160 | http:// |
+---------+-------------+
1 row in set (0.01 sec)
mysql>
これでは、すべてNGではないか。脱力。
ということで、皆様にはご迷惑をおかけしました...
いったい何が原因でこんなことになったのかは、追って調査します。
MMSを使ってMoblogする話し
実は、このサイトで使っているblog ソフトウエア b2evolutionには、Moblogの機能があった。
ただし、通常考えられている方法とは、ひと味違う。
グローバルのGSMの世界では、WAPが一つの標準となって世界中で同じ機能が使えるようになっている。同様に、メールも、ショートメッセージ(SMS)と、マルチメディアメッセージ(MMS)という仕様が規格化され、広く使われている。
グローバル携帯を歌うようになった3GのVodafoneも同様である。
本サイトで使用しているb2evolutionにXML-RPCの脆弱性。7月に発見されており、対策していたが、完全ではなかった。
パッチはここから入手できる。すでに、この脆弱性を利用した攻撃が見つかっているようだ。
大垣さんのBlogサイトに刺激を受け、Blogサイトを開設しました。
b2evolutionというBlogツールを使っています。別に、Nucleusでも、CoreBlogでも良かったと思うのですが、なぜかb2evolutionになりました。