@thorikiriのてょりっき

@thorikiriがWebとかAndroidとかの技術ネタや本を読んだブログです

Web先端技術味見部#17 (今回は「Google Cloud Endpoints」!) #ajimibu に行って来ました

味見部は行きたい行きたいとは思ってたけど、今まで都合つかずに初参加です。今回は、Google Cloud Endpointsが題材でした。
15分くらい遅れてきたので、説明は聞いてないです。とりあえずメモったことなどを。
資料 → Hello Endpoints!
携帯を会場に置き忘れたけど、喫煙所で思い出して事なきを得ました。ご迷惑おかけしてすみません、ありがとうございました。

ハンズオン

  • プロジェクト作成
    • Eclipseをたちあげて、プロジェクトを作る
    • 新規プロジェクトのGoogleカテゴリの中でWebApplicationProjectを選択
    • プロジェクト名、パッケージを入れる
    • GWTはいらない。
    • 1.7.5(以上)を選択
    • Javaは1.6くらいにしておくのが無難かもしれません。まだ1.7は出たばかりなので。
    • web.xmlを確認する
 <servlet-mapping>
  <servlet-name>SystemServiceServlet</servlet-name>
  <url-pattern>/_ah/spi/*</url-pattern>
 </servlet-mapping>

Angular.js + Endpoints

その他

後半は質問タイムになっていたのですが、コード書くのに一生懸命で半分くらい聞いてませんでした。
実際にローカル環境で動作させようとがんばて見ましたが、動きませんでした。
なぜでしょう・・・。
JavaScriptエラーです。gapi.clientがundefinedとなってしましました。
と思ってブログ書きながら色々試してみたら動くようになりました。初期化処理がうまくいってなかったようです。

  • ダメなコード
$(function() {
    gapi.client.load('testEndpoint', 'v2', function() {
        // 処理
    }, ROOT);
});

jQueryのdocument.readyで良いと思ってましたが、ダメなようです。

  • OKなコード
window.onload = function() {
    gapi.client.load('testEndpoint', 'v2', function() {
        // 処理
    }, ROOT);
}
  • jQueryを使いたい場合のOKなコード
$(window).on('load', function() {
    gapi.client.load('testEndpoint', 'v2', function() {
        // 処理
    }, ROOT);
});

第4回.js系開発技術勉強会 #techbuzz に行ってきました

今回もメモを投下しておきます。

入門enchant.jsでゲームを作ろう

資料 → -入門- enchant.js でゲームを作ろう

はじめようBackbone.js

資料 → はじめよう Backbone.js

  • 目的
    • Backbone.jsがどんなものかわかる
    • Backbone.jsのメリデメがわかる
    • 聞いたからと言ってすぐに出来るようになるわけではない
    • 他のフレームワークの比較は作ってない
  • Backbone.js
    • JavaScriptMVCフレームワーク
    • 大規模開発で効果を発揮する
    • 割りと知名度は高い
    • RailsやCacePHPなどとは異なる
    • オブザーバーパターン
    • JavaScriptはイベントを関しするイベント駆動プログラミング
    • Backboneではオブジェクトの状態変化も観察する

MVC

    • View
      • DOMの監視と操作
    • Model
      • データの取得、保存、更新、削除
    • Collection
      • Modelの集合、Controllerではありません。
    • Router
      • URLを監視する
    • History
      • Routerの履歴を監視する
    • Controllerと言うオブジェクトは存在しません
    • M:Model, Collection
    • V: View
    • C: Router, History
    • MとVが大事
  • 具体的
    • ViewがModelとColletionを監視する
    • ユーザがクリックなどの操作でイベントを発生させると、Viewが反応する
    • 反応したViewがModelへ処理を移譲する
    • Modelが通信などを行う
    • Modelが状態変化すると、Viewが状態変化を監視しているので、表示処理などを行う
    • Collectionは?
      • 一覧を扱うのがCollectionになります。
      • ModelとCollectionで相互に関しする感じになります。
  • ここまでのまとめ
    • Viewが、ユーザ、Model、Collectionのイベントを監視する
    • データを取得更新すると、Viewがイベントを動かす
  • デモとソースの解説
    • WEBAPIを叩いて、週間天気を表示する
    • jQuery, underscore.js, Backbone.jsを読み込む。
      • Backbone.jsはunderscore.jsに依存しているので必要
      • underscore.js単体で使っても便利
    • ・・・Viewで使う
    • 作ったViewとModelのJavaScriptを読み込む
    • 最後に、ModelとViewを実体化する
  • Model
    • defaults で初期値を設定する
    • url: で APIのURLを定義
    • sync: JSONPの設定をするためにオーバーライドしている
    • parse: syncの直後にparseが呼ばれる
      • データを整形する
      • returnしたデータがModelの属性になる
  • View
    • el: にHTMLの要素を指定する。
    • events で監視イベントを設定する、 イベントとどこ?を設定
    • initialize: 初期化を行う
      • listenToでモデルを監視する
      • model のchangeイベントを監視し、this.renderを呼び出す。
    • this.model.set(値, {slint: true});
      • 第2引数のsilentは、モデルに値を設定するとchangeイベントが発生してしまうが、発生させないようにするため
  • 最後に
    • BackboneJSでは大規模開発で有効なので、このデモくらいであれば使わない方が早いですよ。

はじめて学ぶ enchant.jsゲーム開発

はじめて学ぶ enchant.jsゲーム開発

【ヒカ☆ラボ】HTML・JavaScriptでiPhone/Androidネイティブアプリが開発できる! "PhoneGap"で学ぶクロスプラットフォーム対応ハイブリッドアプリ概論 #hikalab に行って来ました

タイトル長いですね。

もっとPhoneGapの話を聞きたかったのですが、その前段の話がメインのようでしたね。とりあえず、メモを投下しておきます。

内容

資料 → Phone gapで学ぶクロスプラットフォーム対応ハイブリッドアプリ概論
HTML5/CSS3/JavaScriptをベースとしたPhoneGapのお話です

  • HTML5
    • HTMLの最新バージョン
    • 2014正式の予定
    • W3Cは仕様の取りまとめ
    • 各ブラウザベンダが仕様を提案
    • 増えるタグもあるし、廃止になるタグもあります
    • JavaScriptAPI
    • 何が変わるか
      • ビデオとかオーディオタグなどによりリッチな表現力を持つ
  • 現状は?
    • ベンダー、ブラウザによってばらつきがある
    • モバイル分野で進んでいる
    • PCだと、IEのシェアが多く、IE10より前のバージョンではHTML5への対応が出来ていない
      • Chromeなどですごい表現力があるサイトもIEではダメ
      • IE10のシェアが増えれば巻き返すことも
    • 一方、iOS, AndroidWebKitレンダリングエンジンなので、元から対応が進んでいる
  • HTML5かネイティブか
    • Facebookザッカーバーグネタ
      • HTML5に賭けすぎて失敗した
    • 一方でNewsWeek?は問題ないよと言っている
    • HTML5で作るということは、Webサイトを進化させると言うこと
    • ネイティブは単体のアプリケーションを作ると言うこと
    • HTML5では超えられない壁もある
      • デバイスの機能の真髄まで入り込むようなところ
      • 写真を取る
      • Bluetoothで通信する
      • Push通知。サーバからプッシュしておくこと
      • AndoridのWidget
      • パフォーマンス的な問題がある
      • OpenGLでの3DレンダリングWebGLはまだまだ)
      • NFCの機能など
  • HTML5のメリット
  • ハイブリッドアプリ
  • 事例
  • 競合製品
    • TRIGGER.IO
  • PhoneGapとは
    • カナダの会社が作っていたもの
    • Adobeが買収
    • Apache Cordva:オープンソースバージョン
    • PhoneGapとCordvaは同じものと考えて良い(らしい)
  • なぜネイティブ機能が使えるのか?
    • ネイティブ部分のコードが含まれている
    • JavaScriptからネイティブのコードを呼び出している
    • 開発者はJavaScriptAPIを呼び出して実装する
      • 困った場合には、ネイティブの言語で開発することも出来る
  • 開発環境
    • HTML5ではあるが、ネイティブ言語の開発環境(SDK)が必要になる
  • メリット
    • オフライン対応
      • 通常のWebサイトだとオフライン時に見えない
      • ハイブリッドで作れば、HTMLが内部にあるので問題ない(データ以外は)
  • 他の製品は?
    • Titanium
    • Unity
      • GREEが買収している
      • JavaScript等で3Dのゲームを作るもの
      • 3Dゲームであれば、他の製品よりも強い
  • 何使えばいいの?
    • それぞれに得意、不得意や特化している分野がある
    • 技術や製品で選ぶのではなくて、作りたいもので製品を決めていく
  • JavaScriptライブラリ
    • jQuery/jQueryMobile
    • Sencha Touch
    • RATCHET
    • HTMLでネイティブっぽい画面を簡単に作るためのライブラリ
  • 実際にどう作るの?
    • EclipseXcodeで作るの
    • DreamWeaverなどのPhoneGapのビルドサービスを呼び出すことも可能
    • Monacaを使う
  • 構築事例
    • auのプリインアプリのauヘッドライン(PhoneGapではない)
    • 名刺管理(Eight)
    • テレ朝動画アプリ
    • シューズファインダー
  • EightのDEMO
    • 写真をサーバに送ってOCLでデータを作成する
      • 最終的には、人がチェックする
    • 8〜9割がHTML5/CSS/JavaScript
    • その他はネイティブ言語で実装している
  • 必要となる知識
  • Monaca
    • ローカルにインストールしなければならなかった開発環境が要らなくなる
    • ブラウザだけあればOKな開発環境
    • 現在はベータ版で無料で使える
  • 開発デモ
  • QA
    • 有料化へ考えていることは?
      • 夏ごろまでには何かしら発表しようと考えています
      • 今出ている機能については無料のままにしたい
      • チーム開発等の今より高度な仕組みについては有料化するような方針
      • 完全にフリーミアムです

HTML5/JavaScriptとPhoneGapで作るiPhoneアプリ開発入門

HTML5/JavaScriptとPhoneGapで作るiPhoneアプリ開発入門

appengine ja night #23 #ajn23 に行ってきました

初めてGoogle本社に行って来ました。
と言うことで、メモったことなどを投下します。

Optimizing Your App Engine App (with Appstats)

資料 → http://proppy-appstats.appspot.com/

  • App Engine アプリの最適化と Appstats
  • アンチパターン 1
    • UserのKindにnameとdataプロパティを持つケース
    • nameでクエリー実行する。
    • 結果は、1回のリクエストで2回のデータストアのリードが発生している
    • なぜでしょうか?
    • queryで検索した場合には、Indexを読みに行ってから、実体を読みに行くから合計で2回見に行くことになる
    • 1件しかないことが事前にわかっている場合には、IDで検索するべきです
    • IDであれば1回のReadで済みます
  • アンチパターン 2
    • Index Propertyを使いすぎるケース
    • デフォルトではインデックスが作成されます
    • User Kindのsecret等のpropertyのような、検索キーにならないのにIndexを作成してしまう
    • secretを更新してまたputすると、Datastoreへのwriteが9回も発生してしまう
    • indexed=falseにしておくと、writeは3回で済むようになる
    • これはupdate操作のために、Indexを削除してから、propertyごとにIndexをwriteするため
  • アンチパターン 3
    • Entity全体に対して検索するのはさける
    • User Kindに、city, email, phoneのpropertyがあるケース
    • 2つのEntityを作っておく
    • Londonに住んでいる全てのユーザのemailが知りたい場合
    • 3回のreadが発生する
    • projection queryでemailと指定しておくと、readの回数は3回で変わらないが、small readになる
    • Indexから直接読み込ませることが出来ることになる
    • ただし、必ずしも良いわけではない。
    • writeの場合にはpeopertyをIndexに書き込むコストが発生することは忘れないでください
    • すでにインデックスされているpropertyの場合には有効です
  • アンチパターン 4
    • 20人のUserのEntityがある場合、10人にクエリ、さらに残りの10人にoffsetを指定してクエリする
    • 結果32回のクエリが発生する
    • cursolを使ってみましょう。
    • fetch_pageとcursolを使えば、Readの回数が23回に減る
    • offsetを使用した場合の動作は、offsetの前全部readしてから捨てている
    • もし、offsetを大きい値にすると、ものすごくコストがかかってしまう
    • 一方カーソルを使えば、前回のクエリからやるので早く安くなる
  • アンチパターン 5
    • どんな時もDatastoreから検索する
    • putして、すぐgetするような場合
    • memcachedを使えば改善される
    • User Entityをputした後、memcachedに入れてしまっておけばよい
    • 読むときは、memcachedを見て、なければDatastoreから取ってくるようにする
    • もっと良いPythonでの方法はライブラリを使うこと
      • memcachedとOnMemoryで持つようになり、memcachedの読み込みもなくなる。
  • アンチパターン 6
    • RPC個別実行してしまう
    • 100個のEntityをputする場合
    • 1個1個をそれぞれputするとすごいコストがかかかる
    • 100個のEntityを予め作成してから、一度にputすることで軽減出来る
    • さらにput_asyncを利用することで、並列にputすることも出来る
    • put処理をしている間に別のことができるようになる
      • 処理を待つ場合はwaitモードを使う必要がある
    • put_multiまたは、put_asyncでバッチモードを使って、並列モードでやればRPC呼び出しが減る
    • 他のRPCを使うAPIにも同じ事が言える
  • アンチパターン 7
    • RPCを順番に実行してしまう
    • 3つのURLフェッチを順番に書くと、順番に実行されてしまう
    • ndbのcontextオブジェクトを使えば、並列に実行することが出来る
    • futuresで終わるのを待てば良い
    • 3つ分の時間ではなく、一番遅い時間で済むようになる
  • アンチパターン 8
    • Parentがあって、Parent実行後にエラーが発生した場合に不整合になる
    • 本当は、2つのEntityをグループ化したかったけれども、望ましくない状態になってしまう
    • こういう場合にはトランザクションを使う必要があります
    • functionを作って、@nbb.transactionalを指定する
    • トランザクションとは、全てのオペレーションを実行するか、何もされないかである
    • TaskQuereでも同じことが言える
  • アンチパターン 9
    • 同じトランザクションでUpdateとReadをしてしまう
    • Readの結果、なぜかUpdate前のデータが取れてしまう
    • 同じトランザクションで削除後にReadした場合にも、取得出来てしまう
    • トランザクション中に、getするtrannsationが開始された時点のスナップショットをgetする
    • なので、トランザクションの外で取る必要がある。
    • ndbの自動キャッシュ機能を使う場合にも中が必要
  • アンチパターン 10
    • すごい重要
    • Global Queryは避けること、整合性が重要な場合は特に
    • 変更しても、古いデータが取れるケースがある
    • 更新の動作は内部的にIndexを更新してからレプリケーションするので反映が間に合わない事がある
    • レプリケーションされるまでには時間がかかるので、クエリーを実行するたびに結果が変わってしまう可能性がある
    • この場合には、AnsesterQueryを使う
    • 親のEntityを指定すると良いです
    • しかしながら、トレードオフがあり、1秒間に1回の書き込みしか出来ない
    • 別の方法keys_get & get_multiで取ればOK
    • KeyOnlyQueryを実行し
    • 取得したKeyでget_multiで検索すると、古いデータが検索されることがなくなる。
  • さらに
  • QA
  • いくつまでputはまとめられるの?
    • 自動的にチャンクを作ってやってくれるみたいです
    • ndbライブラリでやってくれるらしいです
  • Java
    • slim3とかでやってくれるんじゃないの?
    • 500位で区切ってたと思う
    • 昔はそれ超えるとエラーになってたから
  • AppStats使うとパフォーマンスは遅くなるの?
  • キーは一位じゃないらしいですが、本当?
    • EntityGroup内では一位ですよ。
  • キーを削除した場合に、再利用されるケースはありますか?
    • 微妙です
    • データストアの仕組みとして、Keyの辞書順でソートされているので、一箇所に溜まってしまうことがあるので
    • 採番は自分でやったほうがいいです。
    • データストアチームでは、自動採番を実装中です。
    • 将来的には新しいAPIを呼べばいいようになると思います。
  • WebApp2のキーがNumericキーだったけど、大丈夫ですか?

Google Compute Engine 最新動向と App Engine 連携

資料 → appengine ja night 23 Jan 2013: Compute Engine what's new and integration with App Engine - Google スライド

  • 目次
    • Google Compute Engineについて
    • Google I/O 2012からのアップデート
    • App Engineとの連携について
  • Google Compute Engine
    • Googleのインフラで動かすLinuxで、Linuxで動けばなんでも動く感じ
    • VMとStorageとネットワークが提供されている
  • アクセス方法
    • APIの上で、コマンドラインアプリケーションがあり、gcutilと言う
    • APIs Consoleの中でCompute Engineは使えます
    • GoogleのClient Librariesでサポートされている
    • これらはAPIを呼び出している。RESTなHTTPとJSONAPIです
  • プロジェクト
    • VMLinuxです
    • Rootアクセスしてなんでも出来ます
    • Modern CPUで1, 2, 4, 8を選べるし、メモリも選べる
    • ネットワークは、2つ分類されている
    • PrivateネットワークとInternetにつながるネットワーク。設定次第で、どこにつながるか設定出来る
    • Privateの場合、Compute Engine内のDNSに名前をつけているので、インスタンス名でアクセス出来る
    • Storageは、PersitentDisk、LoclaDisk、CloudStorageがある。
      • Persistent:永続化される
      • Ephemeral:テンプで消える、ここに保存するといつかなくなるよ
    • または、App Engine Datastoreなどを使ったり色々出来る
  • デモ
  • Google I/O 2012からのアップデート
    • 変わってないこと、Limited Previewのまま
    • 最初はCPUとメモリの割り当てが固定でした
    • しかしながら、ソフトウェアによっては、何を使うかが違うので、色々なタイプが選べるようになりました
    • テンポラリストレージがないものもあります
    • IPアドレスをつなぎ替えることが出来るようにもなりました
      • アプリのバージョンアップの時に使えそうです
    • Read Only Persistent Disk
      • 書き込みは1つのものにしかつながらないけれども、読むだけのものであれば、いくつでもつなげることが出来ました
      • データを準備してから、他のマシンにつなげたり
      • 両方一変にはできません。ReadOnlyかRewirteかどちらかしか使えません。
      • Diskのスナップショットも可能です。5Gしか使ってなければ5Gしか消費しない
    • Better Command Line Scripting
    • And それ以外もあるよ
      • インスタンスのクローンが出来る
      • ヨーロッパのゾーンが出来た。アメリカとヨーロッパ
  • ComputeEngine と AppEngine
    • インスタンスを落とし忘れてしまうことがある
    • 特別なインスタンス以外は自動的に落としてしまうようなアプリケーション
    • Timeout Sample
    • AppEngine
    • ComputeEngine
      • 普通に立ち上がっているだけ
    • OAuth2 Auth
      • ユーザが使っている場合はOK、クーロンジョブの場合は、ユーザは居ない
      • 自分のアプリケーションだけ
      • でも、誰でも消せたら困るので、AppEngineの管理ユーザを作って、設定しておく
      • ComputeEngineのインスタンスにタグをつけて、落としてはいけないタグをは消せないようにしておけばいい
    • REST APIにプロジェクト名を入れるだけで、一覧が取得することが出来ます
    • cronのコードでは、Expiredだったら落とす
  • QA
    • ゾーンにアジアは追加されますか?
      • IssueTrackerに星をつけてください。
      • ドキュメントにあるらしいです。Starなりメールなりしましょう。
    • ハードウェア障害になったらどうなるの?
      • Terminateのステータスになります
    • そのままですので、ご自分で立ち上げてください
      • コントロールするソフトが必要になります
      • 自分で書くか、ライブラリを使うかしましょう
      • LifeScale?経由で色々出来るらしいです
      • オーケストレーション?のソフトウェア
      • HTTPのリクエストはAppEngineで、バックエンドはComputeEngineでやるのがおすすめかもしれない
    • Linuxディストリビューションは選べるの?
    • TaskQuereの連携以外は?
    • ComputeEngineからDatastoreの操作は出来るの?
      • 今はAppEngineのAPIをそのまま呼び出すことはできません。
      • HTTPのリクエスト経由で操作するように、作ってください。
      • 自分のアプリでやる方法と、EndPointsを使ってAPIとして公開する方法があります
      • JavaScriptやモバイル以外からも呼び出せるので、それでやる方法もあります
    • AppEngineとComputeEngineのゾーンの組み合わせは?
      • Googleのネットワーク上しか通らないし、出来るだけ早くなるようにしてます
      • わからないので、ご自分でやって試してみてください
      • ComputeEngineのレイテンシーが安定しています
    • Persistentディスクの種類は選べるの?
    • SSDとか選べるの?
      • 特に選べないようです
    • WebApplicationはAppEngine一択なの?
      • ComputeEngineとしては、特におすすめはしていないようです
      • アーキテクチャが合致するのであれば、別にWebアプリを作るのも問題ないです
      • 計画停止があるので、ご自分でIPの付け替えをするなどしてください
    • 無料枠あるの
      • 今はないです
      • Limited Previewは時間帯によって無料で使えたりするらしい
    • Amazon EC2との差別化は?
    • 1台のハードウェアを複数インスタンスで共有していると思うけど、1つのインスタンスが高負荷状態になると影響あるの?
      • あんまり影響ないようにがんばってるよ
      • 昨日エンジニアがテストしてたけどね。
    • VMはなんなの?
      • KVMをベースに色々と手を加えている
      • 今までGmailなどで培った技術の上にのっているよ。

Google API Expertが解説する Google App Engine for Java実践ガイド

Google API Expertが解説する Google App Engine for Java実践ガイド

Androidセキュリティ勉強会(1/21)

に行って来ました。

と言うことで、メモを投下します。

JSSECとセキュアコーディングガイド

  • JSSEC(ジーセック):日本スマートフォンセキュリティ協会
  • セキュアコーディングガイド
    • セキュアコーディングのTipsを集めて公開・共有しようというガイド
    • 色々ネット上にある情報を精査、他のOSバージョンまで調べてやっている
    • 間違っていることもあるかもしれないが、タイムリーに配信するのを目指している
    • 現場で使えるガイドを目指している
      • 開発者のやりたいこと視点で書いている
      • べからず集ではなく、目的を達成するための目次
      • セキュアなサンプルコードを載せる。基本的にコピペで使える
      • ソースコードの注意事項がコード上に乗っている
      • 脆弱なコードがコピペされないようにする

Androidアプリ脆弱性の事例とガイド

  • 2012年に入ってから脆弱性の報告が急増している
  • 脆弱性の傾向
  • 事例
    • これらの事例では脆弱性が報告されただけで、実際に被害はなかった。そして、修正済み。
    • 1. ネットワークへのアクセス権限を持たないアプリが某投稿アプリの権限で画像をアップロードできる
      • 修正済み
      • プラグイン機構を利用して、マルウェアが画像を探してきて本体アプリを操作している。
      • 画像アップロード用のActivityが外部に公開されていた。(公開アクティビティ)
      • 対策としては、非公開にしておく。
      • AndroidManifestのActivityの項目でandroid:exported="false"に設定する
    • 2. 某リアルタイムコミュニケーションアプリにおける暗黙的Intentの扱いに関する脆弱性
      • 修正済み
      • 暗黙的Intentの取り扱いにミスがあった
      • BroadcastReceiverを利用してメッセージを取り扱っていた
      • マルウェアがメッセージを受信してごにょごにょしていた。
      • 対策としては、明示的Intentを使う
      • 自分の中の特定の処理をしたいだけなので、明示的Intentにする
      • Androidの入門書がAndroidの便利さを説明するために暗黙的Intentの説明を先にしているからかも知れない
    • 3. 某SNSアプリにおける情報管理不備の脆弱性
      • 修正済み
      • アプリがデータをSDカードに保存
      • 保存したデータをマルウェアがごにょっていた
      • SDカードは読取りが出来てしまうので、SDカードには重要なデータを置かない
      • アプリケーション用のディレクトリに、非公開として置くこと(MODE_PRIVATE)
      • ファイルパスを直打ちしてしまうケースもあります。
    • 4. 某魔法少女アプリにおける情報漏えいの脆弱性
      • 修正済み
      • Twitter連携機能でIDとパスワードが見れてしまう
      • LogcatにIDとパスワードを出力してしまっている
      • Logには注意する
      • Progardで自動的に削除する
      • 次の版でガイドに追加される
    • 5. 某オンラインストレージアプリにおけるContentProviderアクセス範囲の脆弱性
      • 修正済み
      • ファイルの同期機能が呼び出せてしまい、ユーザのPublicフォルダにアプリの設定ファイルをアップロード
      • アップロードされたファイルを見て悪いことが出来てしまう
      • 対策として、ContentProviderも非公開にする
      • API Level 8以下では、android:exported="false"にしても公開されてしまうので、注意が必要
  • 知っていれば防げるものばかりである

Androidアプリのセキュリティ

  • セキュリティの考え方
    • 1. 資産
      • システムやアプリにおいて守るべき対象のことを資産と呼ぶ
      • 守るべき対象には情報と機能の2つがあり、それぞれを情報資産と機能資産と呼ぶ
      • Android OSが管理する情報資産:電話番号、電話帳・・・
      • アプリが管理する情報資産:メール、SMS、ブラウザ、SNS・・・
      • Android OSが提供する機能資産:ネットワーク通信、カメラ、通話などのパーミッションで定義されているもの
      • アプリが管理する機能資産:実装している機能、Intentで呼び出されるもの
    • 2. 脅威
      • セキュリティ要件に反する資産へのアクセス
      • ネットワーク上の悪意ある第三者が通信経路上にいる。盗聴とか改ざんとか。サーバへのなりすまし、アプリへのなりすまし。
      • ユーザが導入したマルウェア
      • 悪意のあるファイル:バッファオーバーフローなどを引き起こすものなど
      • 悪意あるスマフォユーザ:デバッグ機能を悪用してアプリ内にあるメーカーの機密情報を読みだしたりする
      • スマホの近くにいる悪意のある第三者:ショルダーハックBluetoothの近距離無線経由での攻撃、窃盗、破壊
      • その他色々と攻撃方法は増えてくるであると思われる
    • 3. 対策
      • 脅威から資産を守る保護施策をセキュリティ対策と言う
      • どれくらい守るのか?すべての脅威に対策するのは無理がある。
      • 資産の重要度に応じて妥当な保護施策を決定する。
      • 重要度で分類
      • 高位では、rootやdexの改造などの高度な攻撃に対しても保護する必要がある。セキュアコーディングガイドでは範囲外。
      • 中位では、Androidのセキュリティレベルを活用する。UI/UX等の要素よりセキュリティを優先させる
      • 下位では、UI/UX等の要素とを比較して、他要素を優先させても良い

ご協力のお願い

  • 第3版を出そうとしています
    • WebViewとHTTPSに関する脆弱性ネタが多いので多数報告されているので追加します
    • 第2版
    • 作業環境
    • ボランティア協力してくださる方を探しています

Android Security  安全なアプリケーションを作成するために

Android Security  安全なアプリケーションを作成するために