ほとんどの脆弱性は珍しいゼロデイではありません。それらは、入力の信頼、スタックトレースの漏洩、シークレットのハードコーディングといった単純なコーディングミスです。締め切りに追われているときや、セキュリティが他人の問題だと感じているときに紛れ込むものです。このセクションでは、すべてのプルリクエストを戦場にすることなく、セキュアコーディングを日々のワークフローに組み込む方法を紹介します。重要な防御習慣、実際の問題を迅速に検出するツール、そしてスタイルを細かく指摘するだけでなく、深刻なバグを未然に防ぐコードレビューの実行方法を学びます。
実際に理にかなったセキュアコーディング
入力検証:誰も信頼しない
すべてのセキュリティインシデントは、信頼できない入力から始まります。ユーザーデータが安全であると決して仮定せず、検証してください。アドホックな正規表現ではなく、組み込みのバリデータを使用します。予期しないものはすべて拒否しましょう。さらに、これによりアプリの信頼性も向上します。
出力エンコーディング:XSSやその他のインジェクション攻撃を未然に防ぐ
入力だけでなく、出力にも注意を払う必要があります。出力も同様に危険な場合があります。HTML、JavaScript、SQLなど、送信先のコンテキストに基づいて常に出力をエンコードまたはエスケープしてください。これにより、XSSやインジェクションのバグが発生する前に防ぐことができます。
シークレット管理:システムへの鍵をハードコードしないでください
2025年には言うまでもないことですが、現状はそうなっています。APIキー、トークン、パスワードをソースコードに置くのはやめてください。環境変数、ボールト、またはシークレットマネージャーを使用してください。PRやコミットでのシークレットに対するアラートを設定してください。
システムの内部情報をすべて漏洩させないエラーハンドリング
スタックトレースや内部ログをユーザー向けのエラーメッセージに含めないでください。ユーザーには分かりやすいメッセージを表示し、詳細は安全にログに記録してください。機密パスや内部情報が漏洩する前に、例外メッセージを捕捉してサニタイズできれば、さらに良いでしょう。
IDEとCIにおけるツール:最初の防御線
リンターとセキュリティプラグイン:作業中の場所で即座にフィードバック
コミットする前にバグを捕捉したいですか?IDEにセキュリティプラグインを追加しましょう。これらは安全でないコードパターンを検出し、記述時に修正を提案します。コンテキスト切り替えや手間なく、リアルタイムでより良いコードを実現します。
シークレット検出:メインに到達する前に認証情報を捕捉する
シークレットをコミットすると、CIがそれを検知します。すると、Gitの履歴にトークンが漏洩し、緊急対応が必要になります。プレコミットフックとCI統合型シークレットスキャナーは、これが起こる前に阻止します。Aikidoはこれを標準機能として提供しており、すべてのプッシュで実行できるほど高速です。
スタイルだけにとどまらないコードレビュー
PR担当者のためのセキュリティ・チェックリスト
コードレビューは、リンティングや変数名の修正だけにとどまるべきではありません。軽量なセキュリティチェックリストを使用して、実際の課題を発見しましょう:
- 入力は検証されていますか?
- 出力はエンコードまたはエスケープされていますか?
- 認証とアクセス制御は強制されていますか?
- この差分にシークレットやトークンは含まれていますか?
- エラー処理は安全でクリーンですか?
すべての行をセキュリティチームがレビューする必要はありません。しかし、これら5つの質問は、リリース前にほとんどのバグを捕捉します。
セキュアコーディングは完璧なコードを書くことではありません。それは、悪いパターンを早期に捕捉し、邪魔にならないツールを使用し、可読性だけでなくリスクを念頭に置いてPRをレビューすることです。
では、作業がユーザーや攻撃者の手に渡る前にテストする方法を見ていきましょう。
.png)