ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

TrackBack、YakiBikiだと難しい点がいくつかあるなぁ。

・「トラックバック技術仕様書」
http://lowlife.jp/yasusii/stories/8.html

↑を見ながら簡単なサンプルスクリプト書いて、送ったり受けたりをはてなダイアリ相手に試したりしてました。

で、アプリとして配布するYakiBikiの場合幾つかスパム判定周りで難しいところが・・・。

  • mb_stringが使えるか分からない。
    • 文字コード判定が難しい。mb_stringの無い環境で動いているYakiBikiに対して変な文字コードでexcerptやtitleを設定されたTrackBackPingが送信された場合、文字コードのチェック自体が出来ない・・・ですよね。
    • →excerptの255バイト切断が送信・受信ともどうしよう?mb_stringが無い環境とかで無理矢理strlenとかで切ってしまうと、末尾が文字化けしたデータを送ったり格納したり表示してしまう事になりそうだし。
  • Services_Trackbackが使えない。
    • 最新版が依存しているNet_DNSBLあたりが、mhashエクステンションを必須としている。この時点で使用を断念。

さすがにsocketエクステンションは入っている事を前提としている。socket拡張が無いとそもそもTrackBackを送信できない・・・いや、送信できなくもないな。actionのURLをTrackBackPing先URLにしたFORMを用意して、間に挟み込めば良いのか。

いっそsocket拡張も前提から外すか。そうなると、スパム判定としてこの時点で使えるのは「excerptに自分のURLが埋め込まれているか」になるんだけど・・・255バイトで切られる(らしい)excerptに引用部分が入ってくるという保証はない。エントリの大分後半でようやく引用部分が出てくるとか考えると、やっぱりexcerptの中にURLがあることでのスパム判定はおかしい。
socket拡張を前提と出来れば、HTTP_Clientあたりでget()で取得した文字列の中を検索すればそれで済むのだけれど。

でもなぁ。socket拡張が使えないとなると、昨今いろいろと不自由するのは確かなんだよな。

あー・・・でもなぁ。sf.netのwebスペースは確かに、webスペースから外部へのHTTP通信ってブロックされてる。そういう環境もあるんだよな。

でもなぁ・・・そういう環境があるからって、実装しないってことにしたら、socket拡張が使える環境でもTBが使えないままになってしまうし。

TB機能のON/OFFフラグを付けておくか、socket拡張の有無で自動的に判別するとかしてみようか。socket拡張が使えれば、HTTP_Clientでさくっとurlからget()して簡易spam判定としてみよう。