こんにちは、株式会社エヌ・エイ・シー・ケア システムインテグレーション事業部です。
セキュリティ対策は、一度実施すれば終わりではありません。新しい脆弱性は日々発見され、攻撃手法も進化しています。
そのため、継続的な情報収集と、それをコードに反映するサイクルが重要です。
本記事では、開発現場で実践できるセキュリティ対策の基本サイクルをご紹介します。
セキュリティ対策の第一歩は、正確な情報を入手することです。以下の情報源を定期的にチェックしましょう。
①公式セキュリティアナウンス
使用しているフレームワークやライブラリの提供元が発信する情報は最も信頼性が高く、定期的な確認が必須です。
②IPAセキュリティ情報
IPAでは、Windows OSやMicrosoft製品など広く使われているソフトウェアの脆弱性情報を公開しています。
特に重要度の高い情報は「重要なセキュリティ情報」として注意喚起されるため、定期的な確認をお勧めします。
重要なセキュリティ情報
①最新バージョンへの更新
ミドルウェアやライブラリのバージョンを定期的に確認し、セキュリティパッチが公開されたら速やかに適用しましょう。
②サポート終了製品の把握
サポートが終了した製品は更新プログラムが提供されず、ゼロデイ攻撃のリスクが高まります。OSやミドルウェアのサポート期限を把握し、計画的に移行することが重要です。
収集した情報は、コードレビューで実際に活用することが大切です。IPAの「安全なウェブサイトの作り方」で紹介されている対策から、特に重要な3つの観点をピックアップしました。
安全なウェブサイトの作り方
①SQLインジェクション対策
データベースクエリでは必ずプレースホルダを使用します。
(悪い例)「SELECT * FROM users WHERE id = ${userId}」
(良い例)「SELECT * FROM users WHERE id = ?」
②XSS対策
HTML出力時はフレームワークのエスケープ機能を利用し、innerHTMLのような生のHTML挿入は避けます。
①バックエンドでの権限チェック
フロントエンドのUI制御だけでなく、必ずバックエンドでも権限を確認します。
②オブジェクトレベルの認可
URLパラメータの改ざんで他人のデータにアクセスできないよう、毎回「このユーザーはこのリソースにアクセス可能か」を確認します。
①ログへの出力禁止
パスワードやトークンなどの機密情報はログに残さないよう注意します。
②エラーメッセージの制御
本番環境では詳細なエラー情報をユーザーに表示せず、サーバー側のログにのみ記録します。
③リポジトリ管理
キーやパスワードはコードにハードコードせず、環境変数や専用のシークレット管理サービスを利用します。
セキュリティ対策は「情報収集」と「コードへの反映」という2つのサイクルを継続的に回すことで実現できます。
まずは、公式アナウンスやIPAの情報を定期的にチェックし、使用しているソフトウェアのバージョン管理から始めましょう。
そして、コードレビューでは今回紹介した3つの観点を意識してみてください。
小さな習慣の積み重ねが、チーム全体のセキュリティレベルを向上させます。