Upgrade to Pro — share decks privately, control downloads, hide ads and more …

堅牢なアプリケーション開発を目指して / First steps to build a robust and secure application

堅牢なアプリケーション開発を目指して / First steps to build a robust and secure application

クラウドサインの開発当初に、堅牢性やセキュリティを保つためどのように進めてったかについてお話してます。

Koichi Wada

July 18, 2019
Tweet

More Decks by Koichi Wada

Other Decks in Programming

Transcript

  1. Copyright (c) 2019 Bengo4.com,Inc. All Rights Reserved 8 当初の要件 契約書を預かるサービスのため、セキュリティを保ち、堅牢

    であること 受信側はアカウントを作らずとも使えるように 電子署名を使用する 開始にあたってMVPをなるはやで
  2. Copyright (c) 2019 Bengo4.com,Inc. All Rights Reserved 12 使用言語: Goの採用

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

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

    ・RDS ・S3 ・自動バックアップ ・MultiAZ (後日)
  5. Copyright (c) 2019 Bengo4.com,Inc. All Rights Reserved 17 設計: 不要な情報が外に出にくくする

    ・IDにUUID V4 ➞ 推測できないURLを構成する ・受信側には期限付きの推測できないURLを発行する ・ステータスコードは、400/404/500 だけ返す ・APIの戻りデータも極力少なく ・Passwordはもちろんハッシュ化する(bcrypt)
  6. 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を使う
  7. Copyright (c) 2019 Bengo4.com,Inc. All Rights Reserved 21 自分たちが知らない脆弱性もあるはず ・フレームワークの使用:

    Revel セキュリティ上必要なHTTPヘッダなど設定済み ・VAddyによる脆弱性診断 ・外部機関による脆弱性診断