自分自身のための ものづくり / 自分自身のためのものづくりメモ

* 日本国外からのアクセスを弾く

 掲示板spam対策として、日本国外からのアクセスの場合は404を返すようにしてみた。
 逆引きではなくIP自体で判断するので、逆引きできない場合も機能する。

2006/07/01,08:13:29,66.249.65.194,"crawl-66-249-65-194.googlebot.com","-","-",GET,"/BBS/BBS.cgi","","1.1",404,671,"-","","Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
 googlebotとかも弾いちゃうのは想定外だったけど、BBSを拾われてもあまりいいこと無いのでこれでよしとしよう。むしろ、これで正常動作を確認できた。


 404を返しつつ普通にフォームを含んだHTMLを返せば、spam投稿ロボットを欺けるかな?

#掲示板spam対策 #Web

* 掲示板spamキタ━━━━(゜∀゜)━━━━ッ!!

 どマイナーな"picoBBS"を使っているおかげで、設置した2003年8月以来まったくspam投稿がなかったわたしゃのWebサイトの掲示板に、ついにspamが書き込まれた。

 むかつくよりも、むしろキタ━━━━(゜∀゜)━━━━ッ!!と大喜び。(笑)

 書き込まれたのは、あちこちで蔓延している英語でのURL羅列系。おそらく披リンク数を増やして検索ランキングを上げる目的だろう。
 その節操の無さから、それっぽいformに片っ端から書き込みを行っているのだろうと推測していたが、これでそうだと確信できた。

 書き込みを行ったホストを調べてみると…
$ echo 84.235.100.2 | ./what_country.pl
SA
$ echo 217.75.194.118 | ./what_country.pl
BA

SA?BA???

http://www.nsrc.org/codes/country-codes.html
によると、
SA - Saudi Arabia
BA - Bosnia Herzegovina

これはこれはわざわざ遠いところから…

参考資料:
不正アクセスの発信地の国別統計をとろう!
http://www.nminoru.jp/~nminoru/memo/ip-address/what_country_from.html

#Web #掲示板spam対策

* はてなのキーワードへのリンクを殺す

はてなダイアリーのキーワードへのリンクを消すProxomitorn用フィルタ。
[Patterns]
Name = "Hatena Keyword Killer"
Active = TRUE
URL = "d.hatena.ne.jp"
Bounds = "<a*/a>"
Limit = 256
Match = "<a class="keyword" href="http://d.hatena.ne.jp/keyword/*">(*)\0</a>"
Replace = "\0"

「このはてなダイアリーの存在意義のひとつと言っても過言ではない素晴らしい機能。」
とあるが…正直、邪魔。

#Proxomitorn #Web

* HTMLをXHTMLに変換してREXMLで処理

プログラム(抜粋)
h = Html2xhtml.new
h.read_array(readlines)

require "rexml/document"
y = REXML::Document.new(h.body.to_s)

y.elements["/html/body"].elements[6, 'table'].elements['tr/td'].elements.each('a') do |a|
    p a.attributes['href']
    print a.text.strip + "\n"
end
結果
"http://auctions.yahoo.co.jp/jp/0-category.html?"
オークション
"http://list3.auctions.yahoo.co.jp/jp/23336-category.html?"
コンピュータ
"http://list3.auctions.yahoo.co.jp/jp/2084039759-category.html?"
パーソナルコンピュータ
楽だ…めっちゃ楽だ…

#Web #ヤフオク

* RandomNote 作成日を表示+年月日のみで時分秒は非表示

def print_leaf(fname, view=nil, anchor=1)
内を改造
      s = "%s\n\n%s\n%s" % [mes.chomp, Time.at(fname.gsub(/\D/,'').to_i).strfti\
me('create : %Y/%m/%d (%a)'), File.mtime(fname).strftime('update : %Y/%m/%d (%a\
)')] # modified by bakuchikujuu

#RandomNote #Web

* target="_blank"があらかじめわかるように

 target="_blank"がついたリンクの前に&rArr;を挿入するproxomitorn用フィルタ。
[Patterns]
Name = "_blank identifier"
Active = TRUE
Bounds = "<a*>"
Limit = 256
Match = "(<a*target=("| )_blank("| )*>)\1"
Replace = "&rArr;\1"

#proxomitorn #Web

* 掲示板spam対策 (英語圏からのspam用)

 近頃猛威をふるっている、海外からのURL羅列spam等に対する対策。

 本文に多バイト文字が入っていなければエラーとして弾く。
 安直で簡単な対策ながら、効果絶大・副作用極小。
(ReadMore...)

* mixi外からmixiへのアクセスを防ぐ

Proxomitorn用フィルタ
[Patterns]
Name = "Block mixi form not mixi (IP)"
Active = TRUE
URL = "(^mixi.jp)"
Limit = 512
Match = "59.106.41."

Name = "Block mixi form not mixi"
Active = TRUE
URL = "(^mixi.jp)"
Limit = 512
Match = "mixi.jp"
Replace = "mixotron.jp"
mixi.jp以外のサイトではmixi.jpという文字列を片っ端から書き換えてしまうという力業。
※単純に文字列の置換を行うだけなので、Javascriptで難読化されたりすると通用しない。
#悪用のヒントを出すのはどうかとも思うが、どーせ悪用するような人はそれぐらい思いつくだろう。
(ReadMore...)

* RandomNoteのrefererを検索エンジン(等)に登録させない

 アクセスログを眺めてたら、RandomNoteのrefererページに検索エンジン経由でのアクセスがあった。

 Webページでの披検索語の表示は迷惑極まりない。その単語が更にCGIに登録されて、それを検索エンジンが拾って、その単語で検索した人がアクセスして…。
 俺自身が大嫌いな要素なのに自分がやらかしていたとは…なんてこった…。

 というわけで、ざくざくとRandomNoteをいじった。
 もともとのコードにヘッダにロボット避けを入れる機能があるので、refererの表示の際にはそのようにするように変更。
def do_referer内
#  print_header(' - referer')
print_header(' - referer', true) # 検索エンジンにリンク元が登録されると邪魔

 あと、cahge_logも検索エンジンにインデックスされるべきじゃない。
def do_change_log
#  print_header
print_header(' - change log', true)

#RandomNote#Web

* 読みやすいWebページを目指して


UI 設計の 5 世紀
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdnwebtool/htm/ui5.asp
「何時間使っても疲れない自然なユーザー インターフェイスを持つアプリケーションを設計しました。実のところ、あまりにも透過性に優れているため、ユーザーの意識から『消えます』。まるでユーザー自身の脳の一部のようで、アプリケーションを使っていることさえ忘れてしまうほどです」

まるで UI 設計における聖杯のようじゃありませんか?私たちを仮想現実世界へと導く、あくまでも空想上の未来像だとお思いでしょうか。そう思っているとしたら、それは間違いです!私たちはみんな、これくらい自然な UI をほとんど毎日のように使っています。私たちはそれを「本」と呼んでいます。

#Web

* RandomNote ロボット対策

 今度はgooのichiroが検索ワードを引っかき回していった。

 検索ワードによるリンク先にアクセスするとその単語がageられるけど、ロボットにかき回されると困る。…が、ロボットによるアクセスだけをうまく制限する方法が思いつかない。他の人にも役に立つかもしれないメモ帳を目指しているので、ロボットの完全排除は論外だし…。

 ぱっと思いつくのは、UAを見てロボットだったら記録に残さないように改造すること。でも、ブラックリスト方式だから、最初にリストを作るのがやや面倒で更に新手が増えるたびにリストを更新する必要があるのが面倒だぁ。

 とりあえずの対策として、ichiroとかはRefererが空なので、Refererがnilな場合は検索ワードを追加しないようにした。
def save
  PStore.new(CACHE_DATA).transaction do |db|
#    db['search']  = @search
    db['search']  = @search if @cgi_referer != nil

2006/02/09:今度はmsnbotが引っかき回していった。対策をミスっていたのが発覚し訂正。
cgi_refererはリファラ無しの場合はnilなのだな。

#RandomNote #Web

* robots.txt BecomeBot締め出し

User-agent: BecomeBot
Disallow: /

 RandomNoteの検索履歴をしっちゃかめっちゃかにしていきやがったBecomeBotをルートから締め出し。
 どーせ日本語読めないんだから、その方が互いに資源の節約だ。

 RandomNoteはロボットに検索させないようにしているようなんだけど、BecomeBotはmetaを解さないらしい。

参考:
ウェブマスターフォーラム - クローラの情報
http://forum.su-jine.net/theme/seo/58/

◇追記
2006/02/04,11:58:17,64.124.85.211,"64.124.85.211.become.com","-","-",GET,"/robots.txt","","1.1",200,117,"-","","Mozilla/5.0 (compatible; BecomeBot/2.3; MSIE 6.0 compatible; +http://www.become.com/site_owners.html)"
robots.txtを読んで去っていった。その辺は行儀がいいな。

#Web

* slashdotted


 スラッシュドットジャパンへの書き込みで、参考資料としてbaku.homeunix.netに写真をアップロードしてリンクを張ったら、(普段に比べると)ものすごい量のアクセスがあった。

$ head -1 /var/log/apache/access.log
xxx.xxx.xxx.xxx - - [15/Jan/2006:06:28:02 +0900] (略)

$ cat /var/log/apache/access.log | grep slash | cat -n | tail -1
 822  xxx.xxx.xxx.xxx - - [16/Jan/2006:23:15:26 +0900] "GET /loft/CADAM_FKbd.jpg
HTTP/1.1" 200 55719 "http://slashdot.jp/articles/06/01/15/0750208.shtml"

$ ruby -e "p (Time.local(2006,1,16,23,15,26).to_i-Time.local(2006,1,15,6,28,2).
to_i)/822"
178

というわけで、3分に1アクセスぐらい。

 たいして大きくもない静止画一枚だからいいものの、メガバイト単位の動画データとかだと大変なことになりそうだ。
 また、コメントだからまだいいものの、タレコミ本文からのリンクだとアクセス量は半端じゃないだろう。

 スラド/jpではslashdottedは発生しないという人もいるけど、弱小回線の弱小サーバなら十分にあり得るだろうな。


#Web #雑記 #2006年1月

* RandomNote 書き換えは自分だけ

BASIC認証を用いて、追加・書き換えは私:爆竹銃だけが行えるように設定。

#Web