Slide 1

Slide 1 text

堅牢なアプリケーション開発を目指して B2B SaaS Tech vol.2 避けては通れぬセキュリティ 和田浩一 [email protected] 2019-07-31

Slide 2

Slide 2 text

登壇者紹介 和田浩一 弁護士ドットコム株式会社 クラウドサインエンジニアチーム Tech Lead兼ラボコーディネーター [email protected] Twitter: @Koichi

Slide 3

Slide 3 text

カプラ クラウドサイン公式キャラクター オスの若いヤギ 白ヤギとして生まれたものの、 書類を食べすぎたことが原因で 体が黒くなってしまいました。 おまけ

Slide 4

Slide 4 text

クラウドサインとは

Slide 5

Slide 5 text

クラウドで契約を簡単に


Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

開発開始にあたって

Slide 8

Slide 8 text

Copyright (c) 2019 Bengo4.com,Inc. All Rights Reserved 8 当初の要件 契約書を預かるサービスのため、セキュリティを保ち、堅牢 であること 受信側はアカウントを作らずとも使えるように 電子署名を使用する 開始にあたってMVPをなるはやで

Slide 9

Slide 9 text

開発において気をつけたこと

Slide 10

Slide 10 text

バグを少なく クラウドサイン公式キャラクター:カプラ

Slide 11

Slide 11 text

Copyright (c) 2019 Bengo4.com,Inc. All Rights Reserved 11 設計: 状態遷移によるデータ管理

Slide 12

Slide 12 text

Copyright (c) 2019 Bengo4.com,Inc. All Rights Reserved 12 使用言語: Goの採用 ・静的型付け/コンパイル ➞ Syntax Error なし ・GC ➞ メモリリークが起きにくい ・CGO ➞ 外部C/C++の呼び出しが比較的簡単 ・gofmt ➞ コーディングスタイルがそろう

Slide 13

Slide 13 text

安心して使えるように クラウドサイン公式キャラクター:カプラ

Slide 14

Slide 14 text

Copyright (c) 2019 Bengo4.com,Inc. All Rights Reserved 14 設計: 安定運用できるように ・こまめにサーバーにデータを保存して、できるだけブラウ ザ側にデータを残さない ・万一アプリが落ちても再起動で、前のところから継続でき る ➞ プロセス監視により落ちたら自動起動 ➞ ブラウザ側はリロードにより処理を継続できる

Slide 15

Slide 15 text

Copyright (c) 2019 Bengo4.com,Inc. All Rights Reserved 15 データ保全: AWS ・RDS ・S3 ・自動バックアップ ・MultiAZ (後日)

Slide 16

Slide 16 text

漏洩を防ぐ クラウドサイン公式キャラクター:カプラ

Slide 17

Slide 17 text

Copyright (c) 2019 Bengo4.com,Inc. All Rights Reserved 17 設計: 不要な情報が外に出にくくする ・IDにUUID V4 ➞ 推測できないURLを構成する ・受信側には期限付きの推測できないURLを発行する ・ステータスコードは、400/404/500 だけ返す ・APIの戻りデータも極力少なく ・Passwordはもちろんハッシュ化する(bcrypt)

Slide 18

Slide 18 text

Copyright (c) 2019 Bengo4.com,Inc. All Rights Reserved 18 ネットワーク対策/不正侵入対策 ・HTTPS ・VPC ・WAF ・OSSEC

Slide 19

Slide 19 text

脆弱性を作り込まない クラウドサイン公式キャラクター:カプラ

Slide 20

Slide 20 text

Copyright (c) 2019 Bengo4.com,Inc. All Rights Reserved 20 Escapeを忘れない HTMLはGoのhtml/templateで大丈夫 ● も消してくれちゃう jQuery.html() を使わない ● jQuery.text() ● 今後はVue.js を使うことで直接のDOM操作はしない SQLを極力書かない ● できるだけORMでやる ● どうしようもないときは、PreparedStatementを使う

Slide 21

Slide 21 text

Copyright (c) 2019 Bengo4.com,Inc. All Rights Reserved 21 自分たちが知らない脆弱性もあるはず ・フレームワークの使用: Revel セキュリティ上必要なHTTPヘッダなど設定済み ・VAddyによる脆弱性診断 ・外部機関による脆弱性診断

Slide 22

Slide 22 text

最後に

Slide 23

Slide 23 text

We are Hiring! クラウドサイン公式キャラクター:カプラ 一緒に世界を変えていく仲間を募集しています!

Slide 24

Slide 24 text

ご静聴 ありがとうございました クラウドサイン公式キャラクター:カプラ