被はてなブックマーク表示APIにXSSの脆弱性があるというネタエントリがはてブされてました。
被はてなブックマーク画像表示ページにXSS攻撃してみる。 - ぎじゅっやさん
「dozoさんはブックマーク数表示しないんですか?(・ω・)」 「うん。XSS攻撃されるのがいやだから。(・∀・)」 「・・・(゜Д゜)」アレ?(・ω・)
オレなんか変なこと言ったか?
オレの中では常識だったんだが。。
・・・(゜Д゜)
ネタすぎて、はてブされている割りに、誰も突っ込まないんですが、勘違いしている人も多いようなので余計なこととは分かりつつ突っ込んでみます。
この状態でURIに細工をする。
こんな感じのURIでどうだろうか?
http://hain.jp/index.php/tech-j/2007/04/09/p140"/><b>hoge</b>
ブラウザはIE6。結果は?
これで、hogeが太字になった、と、でもってこのbタグがscriptタグだったら大変だ、みたいなことをおっしゃってるわけですが、んなわけない。
はてなブックマーク取得APIの仕様をよーく見てください。
<img src="http://b.hatena.ne.jp/entry/image/サイトのURI">
これで指定するわけです。
勘のよい人はもうお分かりですよね。
さっきのURIと組み合わせてみると、こんな感じになります。
<img src="http://b.hatena.ne.jp/entry/image/http://hain.jp/index.php/tech-j/2007/04/09/p140"/><b>hoge</b>
はい、見事bタグのhogeははてなブックマーク表示APIに送られていないことがお分かりでしょうか。
要はこの方、自分のサイトにbタグ書いて、「ほら太字で表示されたよ、このタグをscriptタグにしたら大変だよ」と騒いでいるだけです。
これでセキュリティに問題があるのであれば、全世界のHTMLページはセキュリティに問題があることになりますので。
んなわきゃない。
URIのパラメータの/や&をescapeしないといけないのは、そのパラメータが、親URIのものなのかパラメータに指定されているURIのものなのか分からなくなるから、というのが一番の理由じゃないでしょうか。
ただ、このAPIは、パラメータとしてURIだけを受け取る仕様なので、escapeしなくてもOKということだと思います。
ユーザにとっても、その方が直感的で分かりやすいですし、そもそもescapeされたパラメータを持ったページのはてブ数を表示したいとき、さらにescapeが必要になって大変ですよね。
pathinfoの取得方法が通常の方法とは異なっていることはおそらく事実で、URIに正規表現で当て込んでいるんじゃないかと。
↓似たような質問に回答したことがあるので、そのリンクも貼っておきます。
現在Ajaxを利用した簡単なノートパットを作成しています。保存の際にAjaxの機能を利用し、リアルタイムで保存できるようにしたのですが、サーバーとのやり取りが分けありでGETメソッドです。
単に埋め込まれるだけダロ(゜Д゜)?
と思うような人がターゲットだ。
私も最初はそう思ったが、
攻撃可能なアドレスをいろんな掲示板サイトなどで公開されたりすることも考えられる。
世の中HTMLについて知らない人の方が大半なわけで、
海外のよーわからんサーバやASPにページを一枚置いておき、
「女子○生○×△□」などのキャッチーなタイトルでXSSできるサイトにリンクを張るなり、iframeに埋め込むなりするだけでCookie位は楽勝で取れるだろう。
これはこれで別のお話でして、例えばmixiや2chといった「有名な」「誰でも書き込みできる」サイトの投稿欄から、scriptタグを含んだ文字列が投稿でき、さらにそれが実体参照に変換されないまま表示されてしまうときにXSSが問題になるんですよね。
間違っていること書いていたら突っ込みお願いします。