【第2回】セキュリティワーキンググループの取り組みと、開発で気をつけたいセキュリティの話(後編)

こんにちは。
システムズのセキュリティワーキンググループ(以下、セキュリティWG)です。
最近、「○○社で情報漏えい」「Webサービスが不正アクセスで停止」といったニュースを見かけることが増えました。
とはいえ、いざ「セキュリティを意識して開発しましょう」と言われても、
- どこから手を付ければいいのか分からない
- 何をすると危ないのかイメージしづらい
と感じる方も多いと思います。
このコラムでは、
- そもそもシステムのセキュリティは、何が怖いのか
- 開発時に特に気をつけたい代表的な脆弱性はどんなものか
- セキュリティWGがどんな取り組みをしているのか
を、あまり専門用語に寄りすぎない形でご紹介します。
後編となる今回は、
- クロスサイトスクリプティング(XSS)
- セキュリティWGの活動内容
- 日々の開発で意識したいポイント
についてご紹介します。
クロスサイトスクリプティング(XSS)
ユーザーの書き込み中のスクリプトが、他の人のブラウザで動いてしまう問題
クロスサイトスクリプティング(XSS)は、ユーザーが入力したスクリプトが、
そのページを見た別のユーザーのブラウザで実行されてしまう脆弱性です。
イメージしやすい例として、「掲示板」や「コメント欄」を考えてみます。
- ユーザーの書き込み内容を、そのままHTMLとして画面に表示する
- 書き込みの中に <script>…</script> のようなスクリプトが含まれている
- そのページを見た別のユーザーのブラウザが、そのスクリプトを実行してしまう
こうなると、たとえば次のようなことができてしまいます。
- クッキーの情報を盗み取る
- 本物そっくりのログイン画面を表示し、ID・パスワードを入力させる
どう防ぐか(ポイント)
ユーザーの入力をHTMLに埋め込むときは、
- < や >、” などの記号を
- < や >、" などの文字列に置き換える
ことで、「ただの文字」として表示されるようにします。
多くのフレームワークやテンプレートエンジンには、HTMLエスケープ機能が標準で備わっています。
まずはそれを“デフォルト”として使うのがおすすめです。
明らかにおかしい入力は、そもそも受け付けない
- 不自然に長い入力
- タグやスクリプトを含む必要がない場所で、それらを含む入力
などは、サーバ側で弾きます。
「この項目には何文字まで」「どの文字種まで許可するか」をあらかじめ決めておくと安心です。
前提として、ブラウザは受け取ったHTML/JavaScriptを素直に実行しようとする性質があります。
そのため、
「ユーザーからの入力は、そのまま画面に返さない」
「どこかで必ずフィルタをかける」
という意識が重要です。
セキュリティWGについて
最後に、システムズのセキュリティWGがどのような活動をしているかをご紹介します。
立ち上げのきっかけと、目指していること
セキュリティWGは、
- 開発プロジェクト全体のセキュリティレベルを底上げしたい
- セキュリティに関する知見を、社内で継続的・横断的に共有していきたい
という思いから立ち上がりました。
将来的には、次のような姿を目指しています。
- 社内外へのセキュリティ支援・サービスとしての展開
- セキュリティ人財の育成
- セキュリティチームとしての組成
ツールを使った“仕組みづくり”
セキュリティ対策を、人の注意力だけに頼るのではなく、
ツールも活用して「仕組み」として組み込んでいくことも、WGの重要なテーマです。
現在、次のようなツールを検証・導入しています。
Snyk(静的解析ツール)
ソースコードや利用しているライブラリに、既知の脆弱性が含まれていないかをチェックするツールです。
開発中の段階で「ここは危ないかもしれない」というポイントを自動的に検出してくれます。
OWASP ZAP(動的解析ツール)
実際に動いているWebアプリケーションに対してテスト用のリクエストを送り、
SQLインジェクションやXSSなどの脆弱性がないかを確認するツールです。
これらのツールについて、
- プロジェクトのどのタイミングで使うのがよいか
- どのくらいの頻度で回すのが現実的か
といった点を、WG内で試行しながら運用方法を整えているところです。
勉強会・情報共有・相談窓口として
ツールの導入以外にも、セキュリティWGでは次のような活動を行っています。
- 代表的な脆弱性(今回ご紹介した内容など)をテーマとしたミニ勉強会
- 最近のセキュリティ事故の事例紹介と、そこから得られる教訓の共有
- プロジェクトからの相談を受ける窓口としての役割
私たちが大事にしているのは、
「常に完璧な答えを用意すること」よりも、「一人で悩まず、気軽に相談できる場になること」 です。
おわりに
「セキュリティ」と聞くと、
- 難しそう
- 専門的で、自分には関係ないかもしれない
と感じる方も多いかもしれません。
しかし、今回ご紹介したように、
- ユーザー入力をそのまま信じて処理しない
- 危険になりやすい処理(SQL実行、OSコマンド実行、スクリプトの出力)には、一段階フィルタや専用APIを挟む
- 自分だけで抱え込まず、フレームワークやツール、そして周囲の人に頼る
といった基本を押さえるだけでも、システムの安全性は大きく向上します。
セキュリティWGとしても、「一緒にセキュリティを考えていける仲間」を増やしていきたいと考えています。
日々の開発の中で少しでも、
- 「このSQLの書き方、大丈夫かな?」
- 「この入力値、そのまま画面に出してしまっていないかな?」
と疑問や不安を感じた際には、立ち止まって確認することが重要です。
本コラムが、そのようにセキュリティを意識して見直す一助となれば幸いです。



