Archive for the 'OpenSocial' Category

6 月 16 2008

OpenSocial RESTful API Specificationを翻訳しました

Published by えーじ under OpenSocial

これまで公開していたOpenSocial RESTful API Proposalの翻訳を、OpenSocial v0.8仕様のリリースで公開されたOpenSocial RESTful API Specificationに置き換えました。

ただし部分更新処理の項目についてはTBD(To Be Determined)のままになっています。問い合わせしているので、最新版に更新され次第アップします。

Comments

6 月 03 2008

OpenSocialコンテナの対応状況を調べるガジェット

Published by えーじ under OpenSocial

OpenSocialコンテナにもOrkut, hi5, MySpaceだけでなく、iGoogle, hyves, Netlogなどが登場してきました。

それぞれのSNSには特徴がありますが、仕様をいちいち調べたり、開発に当たって動作確認を行うのは面倒です。現在OpenSocial v0.8は登場したばかりということもあり、ほとんどがv0.7対応のものですが、v0.7への対応状況を確認できるガジェットというのがあります。

http://opensocial-resources.googlecode.com/svn/tests/trunk/compliancetests.xml

これで開発も少しは楽になるのではないでしょうか。

Comments

6 月 03 2008

オープンソースのShindig対応SNS - Partuza!

Published by えーじ under OpenSocial

OpenSocialのコンテナと言えばShindigですが、PHP版は既にOpenSocial v0.7への対応を完了しています。Partuza!はPHP版Shindigの開発者であるChris Chabot氏がオープンソースで開発したShindig対応SNSです。

Shindigがコンテナなのに、じゃあPartuza!は何をするの?と思われるかもしれません。今回はインストール方法と、Shindigとの関係について解説します。

Partuza!をインストールする

Shindigのインストール方法は以前解説しましたので、ここでは割愛します。仮に、Shindigが~/shindig配下にインストールされ、http://localhost:8080/gadgets/…でアクセスできるものとします。

まず、環境としてApache、PHP5(要mcrypt)、MySQL5が必須となります。

レポジトリからチェックアウト

Google CodeのレポジトリからSVNでチェックアウトします。

> svn checkout http://partuza.googlecode.com/svn/trunk/ ~/partuza

データベースを用意

適当なデータベース名、ユーザー名、パスワードで空のDBを作ってください。ひとまずここではそれぞれ、partuza、root、パスワードなしとします。この状態で、~/partuza/partuza.sqlをダンプします。

> mysql -u root partuza < partuza.sql

DocumentRootを設定

Apacheの設定(httpd.conf)でDocumentRootを~/partuza/htmlに設定し、http://localhost/でアクセスできるようにします。もちろん、Shindigとは別ドメインを用意する必要がありますので、バーチャルホストを使う等してください。

設定ファイルを修正

~/partuza/html/config.phpを編集します。ここでは先程作成したデータベース関連の情報とガジェットサーバーのルートURL(gadget_server)を設定します。ガジェットサーバーのURLが、ここではShindigのURLとなりますので、http://localhost:8080/になります。

データベースハンドラをコピー

~/partuza/Shindig/PartuzaDbFetcher.phpと~/partuza/Shindig/PartuzaHandler.phpを~/shindig/php/src/socialにコピーします。

> cp ~/partuza/Shindig/Partuza* ~/shindig/php/src/social

Shindigのデータベース設定を修正

~/shindig/php/src/social/PartuzaDbFetcher.phpにもデータベース関連の情報があるので修正します。加えてShindigがデータベースハンドラを利用するよう、~/shindig/php/config.phpも修正します。ここでは、”handlers => PartuzaHandler”としてください。

これで一通りの準備は完了。http://localhost/にアクセスしてウェルカム画面が出れば成功です。このまま登録し、Orkutライクな一般的なSNSとして利用することができます。

Partuza!とShindigの関係

OpenSocialのガジェットがiframeを介して表示されていることは以前も解説しましたが、簡単に言ってしまえば、iframeの手前がPartuza、後ろがShindigになります。Shindigでは以前から下記のURLにアクセスすることで簡易的なHTMLからOpenSocialぽい表示を行うことはできていましたが、Partuzaを使うことで完全なSNSとなります。

http://localhost:8080/gadgets/files/samplecontainer/samplecontainer.html

とはいえ、PartuzaHandlerを指定したところからも想像できるように、データベースは共有されます。なお、Chris Chabot氏のサイトで実際に動いているものを確認することができます。

Partuza!を使うことで、どうすればShindigをSNSに組み込むことができるかの解析をすることができるだけでなく、そのままちょっとしたSNSを開発することもできてしまいます。ぜひお試しください。

Comments

5 月 04 2008

Shindigを読み解く

Published by えーじ under OpenSocial

以前インストール方法をご紹介した(Java版PHP版)Shindigですが、ようやくPHP版も使えるレベルになってきましたので、ソースを読み解いてみました。なお、Java版の方が実装は進んでいますが、今回はPHP版に限った話ですのでご注意ください。

Shindigとは何なのか

そもそも、の話です。

Shindigはひとことで言うと「OpenSocialコンテナのサンプル実装」です。これをダウンロードして動かすだけで、iGoogleガジェットとOpenSocialガジェットの動作テストを行うことができます。実際はOpenSocialを広く普及させるよう、数多あるSNSがShindigを参考に、もしくは流用してOpenSocialに対応することを目的にしています。

主なディレクトリ構成

  • config: コンテナ設定
  • features: 各種機能セット(JavaScriptコード)
  • java: Javaソースコード
  • javascript: HTML, JavaScriptコード
  • php: PHPソースコード

ディレクトリ解説

config

container.jsというファイルがコンテナのデフォルト設定となり、プロキシやOpenSocial APIのパス等の設定を行います。設定を変更したい場合はこのディレクトリにファイルを追加して、必要な部分のみをJSON形式で追記すれば、デフォルト設定が引き継がれます。なお、JSON形式なのは、PHPやJavaだけでなく、他の言語からも読み込むことを想定しているためと思われます。(Perl版やRuby版のShindigも開発される予定だそうです。)

features

ガジェットXMLに<Require features=”">という形式で記述される機能(features)をセットとして読み込みます。featuresディレクトリ内は機能セットごとにさらにディレクトリに分けられていて、各ディレクトリにあるfeatures.xmlファイルで必要なJavaScriptライブラリセットが指定されています。

php

PHPのソースコードはJava版を参考にしているためか、あまりPHPらしくない実装になっています。

まずMVC形式を取っていません。オブジェクトの分け方は色々な方法がありますが、ウェブアプリケーション的なものと言うよりは、Java的な方法で(?)機能や設定ごとに、非常に細かく分けられています。メンバ変数にいちいちget〜やset〜メソッドを用意しているのもJavaっぽい。

PHPへのリクエストはリライトされ(.htaccessファイルで指定)、すべてindex.phpに読み込まれます。index.phpはリクエストのパラメータに応じて処理を6種類のサーブレットに振り分けます。

  • 静的ファイル(/gadgets/files)
  • JavaScript(/gadgets/js)
  • プロキシ(/gadgets/proxy)
  • ガジェット(/gadgets/ifr)
  • メタデータ(/gadgets/metadata)
  • OpenSocial API(/social/data)

クラスのインクルードは__autoloadが使用されているため、ほとんど書かれていません。

config.phpには各種ファイルへのパスなど、設定が記述されています。(config/container.jsとは別物です)

なお、Shindigはデータベースを使っていないので、キャッシュは/tmpディレクトリ、設定はcookie、友達リストは静的XMLファイルでそれぞれ管理されます。

まとめ

ソースコードは一見シンプルですが、かなり複雑です。Java的な実装方法に加え、他言語版Shindigとの設定等の共有を想定した汎用化など、オプティマイズする余地はかなりありそう。PHP版Shindigを既存フレームワークに取り込むのは難しくはありませんが、あくまでも参考にする程度にした方がいいと思われます。

なお、今のところOpenSocialバージョン0.7対応ですが、まだまだバグも存在しています。バージョン0.8の機能仕様が出揃ってきたところですが、Shindigでの対応は時間差が出そう。

OpenSocial APIは実装されていますが、ShindigでOpenSocial機能が使えるようになったというには、まだまだ足りない感じ。あとはOAuthとか、RESTful APIとか、、、。

Comments

4 月 23 2008

Cajaとは何か

Published by えーじ under OpenSocial

OpenSocial周りの調査をしていると、Cajaという言葉に遭遇します。セキュアなJavaScriptを実現するもの、ということだけ分かっていたのですが、詳細を調べてみました。

クロスサイトスクリプティングとブログパーツ

gooやlivedoor、fc2などのホスティングを含めたブログサービスを使ったことのある方はご存知と思いますが、サービスによってブログパーツが貼れるもの、貼れないもの、一部だけ許可しているものがあります。なぜでしょうか?

Cookieには同一ドメインから実行されたスクリプトしか参照できないという特徴があります。これを利用して、Cookieをセッション情報や閲覧履歴の保存場所として活用しているサービスは少なくありません。上記ブログサービスがブログパーツを許可しないのは、これらの情報を悪意のあるJavaScriptから守るためです。逆に言うと、同一ドメイン上でJavaScriptが実行できれば、そのセッション情報や閲覧履歴を盗むことができてしまいます。これをXSS(クロスサイトスクリプティング)と言います。

XSSが発生するのは、投稿フォームを使って、そのドメイン上のページにJavaScriptを埋め込み、実行できるケースが挙げられますが、ブログパーツが貼れること自体もJavaScriptが埋め込めるという意味では同じであり、まともに作られたサイトであれば、まずこういったことは出来ません。

とはいえ、実際にブログパーツを貼付けることができるブログは存在しますし、セキュリティの問題を回避しつつこれを実現するためのアプローチがいくつか存在します。

JavaScriptを貼付けるためのアプローチ

ドメインを分ける

ブログを表示するドメインをセッション情報等のクリティカルなCookieを保存していないものにしてしまいます。盗むものがなければ、泥棒が入ったところで何も困ることはありません。このアプローチをとっているものにはlivedoorブログが挙げられます。

安全性の確認できたJavaScriptのみ許可する

サービス提供者が安全なブログパーツのリストを作り、ブログ管理者がそこから選ぶ、というアプローチです。ブログパーツの選択肢が狭くなるためユーザーには好まれませんが、全く貼れないよりはよいはず。gooブログやはてなダイアリがこのアプローチをとっています。

iframeで表示する

iframe内に別ドメインで表示してしまえば、上記「ドメインを分ける」と同様に扱うことができます。このアプローチを取っているものにiGoogleが挙げられます。iGoogleはブログではありませんが、ブログパーツ=ガジェットと捉えれば同じ問題を扱っていると言えます。

JavaScriptの危険な部分を無力化する

サーバーがJavaScriptを出力する前に危険な部分を書き換え、無力化してしまいます。このアプローチをとっているブログがあるか知りませんが、やり方としては誰でも思いつくのではないでしょうか。ただ、これを実現するためには膨大な労力と知識が必要となります。これがオープンソースで存在しているとすれば、どんなに素晴らしいでしょう。そして、これを実現することができるのが今回紹介する、Cajaです。

Cajaで実現できること

Cajaはカハと読みます。CajaはGoogleのオープンソースプロジェクトの名前で、これを使うことで、同一ドメイン上のページに安全に外部のJavaScriptを貼付けることが可能になります。

Caja紹介(日本語訳)

開発に当たってCajaを使って防がれるべきとされた攻撃方法の一覧

どこでCajaを使うのか

CajaはOpenSocialコンテナ上での利用を想定して作られているようです。Caja紹介(日本語訳)の説明も、Shindigでアプリケーションを利用することが前提となっており、Cajaを使ってガジェットをインラインで表示した方がパフォーマンスが向上する旨が記載されています。

Cajaの形態

実はここがまだ調べきれていない部分なのですが、どうやらJavaによるサーバーサイドでのリライトと、JavaScriptのライブラリで構成されている、ぽいです。この辺はもう少し調べる必要がありそうです。

何か他に情報をお持ちの方がいらっしゃいましたらぜひ、教えてください。

Comments

« Prev - Next »