okhttp3のwebsocketでのサブプロトコル定義

クライアントは、WebSocketコネクション確立時に、対応可能なサブプロトコル一覧をSec-WebSocket-Protocolヘッダで提示します。

OkHttpではRequestクラスでヘッダを追加出来ます。

そのClientが送るリクエスト全てまたは条件を満たすものに追加したいならInterceptorを使用しましょう。

今回のケースではWebSocketでのrequestはひとつだったので使いませんでした。

サブプロトコル名はアプリケーション側で勝手に決めて大丈夫なものなので、各自サーバが対応する適切なものに変えましょう。

Interceptorを使用しないとき

Request request = new Request.Builder()
.addHeader("Sec-WebSocket-Protocol", "test")
.url(WS_URL)
.build();

Interceptorを使用するとき

Interceptor interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request req = chain.request()
.newBuilder()
.addHeader("Sec-WebSocket-Protocol", "test")
.build();
return chain.proceed(req);
}
};

OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(interceptor)
.build();

 

 ビッグエンディアンからリトルエンディアンに変換

google cloud speech APIを使用するときに書きました。

サンプルで使用されているLINEAR16はPCM16のリトルエンディアン版みたいです。

PCM16は16bit=2byteなので、bytes[i+1] bytes[i]に変換していく作業です。

short型でのコードはこちら。

public static byte[] short2little(short[] sData) {
ByteBuffer buffer = ByteBuffer.allocate(sData.length * 2);
buffer.order(ByteOrder.LITTLE_ENDIAN);
buffer.asShortBuffer().put(sData);
return buffer.array();
}

 

onClosed vs onClosing in OkHttp3のWebSocketクラス

【結論】

onClosing()は成功でも失敗でもとりあえず実行される。

onClosed()は切断が成功した場合実行される。向こう側から一方的に閉じられた場合は実行されない。

順序はonClosing()の後にonClosed()

続きを読む

データバインディングでOrmaとRecyclerView

Ormaの公式のexampleを再現する形でやっていきます。

Ormaは入っていて、モデルを作ってビルドした後という前提です。

exampleではTodoモデルなので、適宜使用するモデルに変更しましょう。 

 

1.build.gradleにバインディング設定を追記。CardViewとRecyclerViewも書いておく。

Android Databinding 〜超入門〜 - Qiita

implementation 'com.android.support:recyclerview-v7:26.1.0'
implementation 'com.android.support:cardview-v7:26.1.0'


2.フラグメントを作成し、xmlのルートをFrameLayoutからlayoutに変更し、ルートのwidthとheight属性、TextViewも消す。RecyclerViewを足す。

参考:

Android-Orma/fragment_recycler_view.xml at master · maskarade/Android-Orma · GitHub

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.example.android.プロジェクト名.なんたらFragment">

<android.support.v7.widget.RecyclerView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#eee"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
/>

</layout>

 

3.公式を参考にFragmentのjavaの方の必要なさそうなソースを消しておく。

Android-Orma/RecyclerViewFragment.java at master · maskarade/Android-Orma · GitHub

 

4.CardViewのXMLをlayoutディレクトリに作成する。

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/tools"
>
<data>
<variable name="user" type="com.example.android.パッケージ名.infra.entity.User" />
</data>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="4dp"
android:foreground="?android:attr/selectableItemBackground"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="2dp"
>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
android:text="@{user.name}"
/>
</android.support.v7.widget.CardView>
</layout>

 

5.VH、Adapterの順にコピペしてくる。

Android-Orma/RecyclerViewFragment.java at master · maskarade/Android-Orma · GitHub

6.onCreateViewをいい感じにする。

7.Activityに作ったフラグメントを紐付ける。

このとき、Fragment側で継承しているフラグメントがサポートライブラリならgetSupportFragmentManager()を使用しないとaddが解決出来ない。

 

以上です。

getItemCount()などでUIスレッドからOrmaを利用するため、OrmaDatabaseの生成時に実行スレッドの制約をしていると落ちるので気をつけてください。

 

制約を外すよりもっといいやり方があったら教えてくれると幸いです。

カミンスキー攻撃について

hogehoge.www.example.jp.の解決に対し、

応答がこうなる。

 

アンサーセクション
ANSWER SECTION

hogehoge.www.example.jp. 86400 IN A なんでもいい

解決した結果。

ここは何でも良い。

 

権威セクション
AUTHORITY SECTION

www.example.jp. 86400 IN NS dns1.攻撃者が用意した.com.

その結果をもつDNSサーバ一覧。

これで、被害を受けているキャッシュサーバ上から

www.example.jp.の正規の権威DNSサーバのキャッシュが消えたら、

www.example.jp.についての解決要求をdns1.攻撃者が用意した.com.に送るようになる。

 

アディショナルセクション
ADDITIONAL SECTION

オーソリティセクションのDNSサーバのAレコードとか

ここにdns1.攻撃者が用意した.com.のAレコードを書く場合もある。

 

情報セキュリティ 対策のしおり 覚書

サポートの切れたOSやソフトウェア

脆弱性が見つかっても、脆弱性を解消するための修正プログラムが作成されないため危険。

ネットワークからの攻撃対策

スケアウェア

脅迫するウイルスのこと。例えば、「あなたのパソコンはウイルスに感染しています。」などとニセの情報を表示する。

ボット

パソコンに感染し、そのパソコンをネットワークを通じて外部から操ることを目的として作成されたプログラム。 これが指令サーバを介してボットネットを構成する。

ウイルス対策ソフトの設定

パスワード盗難対策

  • 必要に応じて変更
  • 紙に書き留めて放置しない
  • パソコンに保存しない
  • いつ漏洩するか、または漏洩したかわからないので、定期的な変更
  • 他のサービスでなりすまされないように使いまわさない

ファイルサーバやオンラインストレージ、ネットワーク接続の複合機

サーバやネットワーク接続機器は必要な人にのみ共有されるよう設定する。

脅威や攻撃の手口を知るために

利用中のウェブサービスや製品メーカーが発信するセキュリティ注意喚起を確認し、社内で共有する

電子メールの誤送信防止

送信ボタンを押す前に、再度宛先とメールの内容の整合性を確認する 複数の人に送信する際には、送り先の指定方法(To, CC, BCC等)を確認する 具体的には→目視にて送信先アドレスの確認

電子メールの情報漏えい対策

電子メールを保護する理由
  • 間違った相手に届いても安心
  • 通信経路で盗聴されても安全
具体的な情報保護方法
  • メール本文の暗号化 PGP, S/MIMEを利用する

  • 電子メールの添付ファイルを暗号化して送受信する方法
    一般的なドキュメント作成ツールやファイル圧縮・解凍ツールでパスワード保護する

  • 専用サーバに格納し、宛先には一時的なアクセス権を渡す方法

電子メール本文や添付ファイルを専用のサーバに格納する。 電子メールの宛先には、該当ファイルの一時的なアクセス権(URL, アクセス用の利用者IDとパスワード)を渡す。

利点
  • 間違った宛先に情報を送信してしまった場合でも情報にアクセスできないように制御できる
  • 情報が宛先に伝わったかどうかがサーバの履歴を参照することで確認できる
暗号化した添付ファイルのパスワードの送りかた
  • 直接本人に電話等で伝える
  • あらかじめパスワードを決めておく

バックアップの注意事項

  • 定期的なバックアップ
  • 戻せることの確認
  • バックアップ媒体は安全に管理し、情報漏えいを防ぐ バックアップ元の情報と同じ環境はNG。 同じタイミングで壊れるまたは盗難に遭う可能性があるため。
  • 不要になったら確実に消去

重要な情報の管理

保管場所を定め、作業に必要な場合のみ持ち出し、終了後に戻すことを徹底する。 机の上に放置せず、鍵付き書庫に保管する。

重要な情報の持ち出し

ノートパソコンやスマートフォンの利用にあたって、 パスワードの入力を求めるように設定したり、 データファイルを暗号化するなどの対策を事前に行う。

関係者以外の立ち入りの制限

サーバ、書庫、金庫など、重要な情報の保管場所の近くには、 無許可の人が近づけないようにする。

対策

事務所で見知らぬ人を見かけたら声をかける

事務所での機器の盗難対策

退社時に、机の上のノートパソコンや備品を引き出しに入れ、施錠する

事務所等での入退出管理

最終退出者は、事務所を施錠し、退出の記録(日時、退出者)を残す

重要な情報を廃棄する際の注意点

書類は細断、データは消去ツールを使う。

OSのファイル削除機能で削除できるのは見かけ上だけ。 記憶媒体の寿命を延ばせるし、削除機能の見ための処理が速くなるため。 専用のファイル復元ソフトを利用すると、削除したファイルの記録位置が 他のファイルによって使われていなければ、復活する場合がある、

USBメモリからの漏洩対策
  • 貸し借りをしない。
  • 自動暗号化の出来る暗号化USBメモリを利用する。

情報漏えい対策のしおり 覚書

企業の情報資産を、許可なく持ち出さない

大切な情報は持ち出さない、仕事を家に持って帰らないこと。

情報漏えいの原因となった管理ミスの例

  • 引越し後に個人情報の行方がわからなくなった 例:誤廃棄

  • 受け取ったはずの個人情報が紛失した 受け渡し確認が不十分だったため。

  • 誤って開示してしまった 情報の公開、管理ルールが明確化されていなかったため。

持ち出し時やってはいけないこと

  • 管理下にないパソコン(例:ネットカフェのパソコン)で利用する

  • 業務で持ち出したパソコンを不必要または無防備な状態で、企業外のネットワークに接続する

  • 業務で持ち出したパソコンを、業務以外の目的で利用したり、他人に貸したりする

持ち出し許可を得た場合は、データを暗号化しておく。

情報資産を、未対策のまま、目の届かない所に放置しない

情報資産を、未対策のまま、廃棄しない

私物のパソコンや電子媒体やデータを、許可なく持ち込まない

許可されていないプログラムやサービスは、事前に安全な環境で動作確認を行って、 仕組みや設定をよく理解した上で、管理者の許可・管理のもとで利用する。

権限を、許可なく、他の人に貸与または譲渡しない

業務上知り得た情報を、許可なく、公言しない

情報漏えいを起こしたら、まず報告する。自分だけで判断しない。