外部からのアクセスに対するセキュリティについて

198 views
Skip to first unread message

Yohei Tsutsumi

unread,
Aug 18, 2014, 8:40:05 AM8/18/14
to mlk...@googlegroups.com
外部からのアクセスに対して質問です。

var milkcocoa = new MilkCocoa("https://io-xxxxxxxx.mlkcca.com");
この2行だけで扱える手軽さは非常に魅力的なのですが、
外部のエンジニアがこのスクリプトを含んだアプリを作成することで、
query関数等によりDataStoreに格納された情報を抜き取ることが可能なのではないかと思っています。
ドメインによる制限等で外部からのアクセスを禁止するセキュリティルールがあるのでしょうか?

他のセキュリティルールもドキュメントを作成されているところだと思いますが、実際にアプリを作成してみて一番気になるところだったので質問させてもらいました。

Shogo Ochiai

unread,
Aug 18, 2014, 12:55:51 PM8/18/14
to mlk...@googlegroups.com
こんばんは、エンジニアの落合です。
セキュリティはみなさんが気になさると思ったので、前倒しで概要を取りまとめましたので、参考までにご覧ください。

現在、セキュリティに対する設定項目は、ルールスクリプト又は、設定画面の許可Originにて設定できます。


まず。許可Originですが、任意のドメインで生成されたJavaScriptのみmilkcocoaクライアントの実行を許可するこができる機能です。管理画面のアプリの詳細ページの「設定」のタブ、「許可origin」にて設定できます。 指定の仕方ですが、<ホスト名>:<ポート番号>という形式で、指定できます(例, mlkcca.com:3000など) 。デフォルトでは、*:*と設定してあり、どこからでも実行可能な状態となっております。

また、ルールスクリプトについてですが、dataStoreの任意のpathに対して、特定のイベントの特定の条件における動作を制限できる機能です。以下の形式にて設定します。

<パス> { 
    permit: <イベント名>;
    rule : <ruleスクリプト>;
}

<パス>はアクセスを制限したいdataStoreのパスで、ワイルドカードや変数を使用できます。permitには指定したパスのdataStoreメソッドに対するAPIの実行で発火するイベント名が入ります。 ruleは許可、または不許可を決定するbooleanを返すスクリプトです。
イベント名は、現時点では、push, set, find, remove, allがあり、「pushイベント:dataStrore.pushメソッドに対して」「setイベント : dataStore.setメソッドに対して」 「findイベント :dataStore.query, dataStore.getメソッドに対して」「removeイベント :dataStore.removeイベントに対して」といった具合に設定することができます。(ただし、今後のアップデートにて、findを廃止し、queryイベント、getイベントを用意する予定です。) 

例を上げますと、 

/chat/message { 
    permit : push;
    rule : true;
}

これは、/chat/messageに対して、dataStore.push メソッドのみ許可することができます。
もうひとつ事例をあげますと、 

/chat/[user_id]/data {
    permit : push;
    rule : user_id == account.id;
 }

このルールスクリプトはパスにおいてパターンマッチを行い、パス内に埋め込んだ任意の変数に値を格納できます。/chat/aaa/dataや/chat/mlk/dataなどにマッチし、[ ]で囲まれた変数名によって、パターンを補足することができ、その変数はruleスクリプト内で有効になります。また、account変数はグローバル変数のように振る舞う事前に用意された変数で、そのパスにアクセスするユーザの情報を持ったオブジェクトです。この場合、 アクセスするユーザIDと、アクセスするパスに補足された変数が一致したときにpushが許可されます。

まだまだ、機能はありますが、今後ドキュメント公開をお待ち下さい。 Ruleスクリプトに関し、ドキュメント、機能共にアップデートしmilkcocoaスクリプトのセキュリティの機能も充実させていきますので、今後ともmilkcocoaをよろしくおねがいします。 

加藤貴司

unread,
Jun 3, 2015, 7:41:07 PM6/3/15
to mlk...@googlegroups.com
お世話になっております。加藤と申します。
わたしも似たような部分で疑問に感じましたので、質問させてください。
あるドメイン(example.com)のみでmilkcocoaの使用を許可したい場合、
どのようにすればよろしいでしょうか?
以下の設定でホスティングしたところ、ダッシュボードの「設定」にドメインを追加していない状態で、なぜかexample.comで使用できています。
ダッシュボードの現状
「設定」のところ
localhost、127.0.0.1

「セキュリティルール」
* {
    permit : all;
    rule : true;
}
example.comを例にご回答いただければ幸いです。よろしくお願いいたします。

加藤

部谷修平

unread,
Jun 3, 2015, 11:12:22 PM6/3/15
to mlk...@googlegroups.com
加藤様

部谷です。

現状のMilkcocoaでは、「設定」の許可Originの項目に設定されたOriginは、authWithToken APIを許可するOriginになっています。
なので他のAPIは通常通り使用できるようになっています、ただしユーザ認証は設定したOriginでしか行えません。
この点に関しては、今後全てのAPIに適用するように変更する可能性がございます。

よろしくお願いします。

加藤貴司

unread,
Jun 4, 2015, 5:22:29 AM6/4/15
to mlk...@googlegroups.com
部谷さま

ご回答ありがとうございます。そんなことは、あまりないと思いますが、
jsのソースコードを悪意のある人に見られて、以下のソースコードを使い回しされると嫌だなと考え、お伺いいたしました。
var milkcocoa = new MilkCocoa("xxxxxxxx.mlkcca.com");
その場合はどのような方法をとればよろしいでしょうか?
ご回答いただければ幸いです。
よろしくお願いいたします。

加藤

部谷修平

unread,
Jun 8, 2015, 6:59:55 AM6/8/15
to mlk...@googlegroups.com
加藤様

セキュリティルール等で守られていないデータは、基本的にはどこからでもアクセスが出来ます。
これは基本的には、どのWebサービスも同じだと思います。
ただMilkcocoaの場合、クロスオリジンの制約を持たせられないなどの制限がございますので、その点は今後仕様変更する可能性が御座います。


認証とセキュリティルールについてはこちらのブログをご参考ください。

部谷
Reply all
Reply to author
Forward
0 new messages