はじめに
こんにちは。SRE の izzii です。
テックタッチのエンジニア規模もそれなりに拡大し、若手の採用も進んできたため、セキュアコーディングを徹底していきたいという思いがあり、まずは意識改革ということで勉強会を実施しました。セキュアコーディングを目的とした場合には教育だけでなく Static application security testing (SAST) の導入といった方法もあるのですが、まずは自分を含めた開発メンバーにノウハウをインストールすることにしました。セキュアコーディングへの意識が高まれば、いづれ SAST の導入の際に抵抗感も少ないだろうと考えています。いきなり SAST を導入しても、誤検知が煩くて浸透しないリスクもありうると考えています。
そこで上記の勉強会で利用するために、Go Secure Coding Practice を日本語翻訳しました。
翻訳した pdf は次のリポジトリの dist
フォルダで公開しています。https://github.com/techtouch-inc/Go-SCP-jaJP
日本語翻訳したコンテンツは原書に則り CC BY-SA 4.0 ライセンス の元、以下のリポジトリで公開いたします。
ライセンスの範囲内でご利用ください。
https://creativecommons.jp/licenses/
Go Secure Coding Practice とは
Checkmarx Security Research Team と OWAP の共著によって作成された、Go 言語のウェブ開発における、セキュリティプラクティスのドキュメントになります。OWASP Secure Coding Practices - Quick Reference Guide v2 (stable) に準拠しています。
本資料を勉強会のメインコンテンツとして採用した理由は以下です。
- Go 言語に特化していて、テックタッチのバックエンド開発にすぐに活かせそう
- 網羅性が高く密度が高すぎないので講習で使うのにちょうど良さそう
- 無償で利用できる
- 翻訳した資料を公開配布することができる
コンテンツ一覧
入力値のバリデーション バリデーション サニタイズ 出力のエンコーディング | XSS クロスサイトスクリプティング | SQL インジェクション 認証とパスワードの保存 | 認証情報の伝達 | バリデーションと保存 | パスワードポリシー | その他のガイドライン セッション管理 アクセスコントロール 暗号に関するプラクティス | 擬似乱数の生成 エラー処理とロギング | エラー処理 | ロギング データの保護 通信のセキュリティ | HTTP/TLS | ウェブソケット システム構成 データベースのセキュリティ | 接続 | 認証 | パラメータクエリ | ストアドプロシージャ ファイル管理 メモリ管理 一般的なコーディングプラクティス | クロスサイトリクエストフォージェリ | 正規表現
良かったところ
やはり Go 言語に特化したコンテンツになっていたことが非常に良い点だと感じました。例えば Go 言語の標準ロガーには log.Fatal
や log.Panic
といったクセのある関数がありますが、これらの正しい用法が書かれていたり、標準正規表現ライブラリが決定性有限オートマトンをベースにしたエンジンであることによる他言語との違いと ReDos に関するコンテンツなど、Go 言語ならではの学びのある内容となっています。網羅性も高い印象です。
注意すべきところ
本書の冒頭で、Go Tour を終えたプログラミング初学者にもオススメと書いてはあるものの完全に同意はできません。個人的には他言語の経験のある Go 初学者にはお薦めできても Web エンジニア初学者にはお薦めしづらいです。ハウツーの側面が強く、原理原則にはなるべく立ち入らないスタイルのためサクサク読み進められるものの、経験が浅いと「なぜそのハウツーが良いのか」という行間を読み取ることが難しい場面があると思われます。Web エンジニア経験の浅い方が独学で利用される場合は先に安全なウェブサイトの作り方や徳丸本などを読まれることをお薦めします。
最後に
翻訳には時間を要したので、翻訳資料を他の方にも使っていただけると大変嬉しいです。勉強会自体は8時間分ほどのボリュームでした。勉強会に参加いただきフィードバックを下さった弊社メンバーの皆様ご協力感謝いたします。