セキュアコーディング【secure coding】セキュアプログラミング/secure programming
概要

攻撃者が悪用することができるソフトウェアの保安上の弱点を「脆弱性」という。その多くは開発者がコードを書く際の不注意や知識不足に起因している。例えば、Webアプリケーションで外部から入力されたデータをそのままプログラムに渡してしまうと、SQLインジェクションやクロスサイトスクリプティング(XSS)といった攻撃を受ける危険性が生じる。
こうした脆弱性はリリース後に発見されることが多く、修正コストは開発段階で対処する場合と比べて大幅に増大する。セキュアコーディングはこうした問題を未然に防ぐため、プログラムを記述する際に脆弱性になりうるコードのパターンを極力排除する取り組みである。
例えば、利用者や外部システムから受け取ったデータは、必ず想定された形式・範囲内であるかをチェックしてから処理に使用するようにすることで、想定外の悪意ある入力でシステムを危険に晒すことを防ぐことができる。また、エラーメッセージに内部の詳細情報を含めないようにすることで、システムの構造やファイルパスなど、攻撃者にとっての手がかりになりうる情報を渡さないようにすることができる。
セキュアコーディングを支援する仕組みとして、業界標準のガイドラインが広く参照されている。非営利団体OWASPが公開する「OWASP Top 10」はWebアプリケーションにおける重大なセキュリティリスクをまとめたものであり、世界中の開発現場で活用されている。日本では情報処理推進機構(IPA)が編纂・公開している「IPAセキュア・プログラミング講座」なども参照されている。
開発チームがセキュアコーディングを組織的に実践するためには、教育や開発プロセスへの組み込みが必要となる。コードレビューや静的解析ツールの活用によって脆弱性を早期に発見するという取り組みも広がっている。近年では、開発工程の早い段階からセキュリティを組み込む「シフトレフト」や「セキュリティバイデザイン」の考え方が普及しており、セキュアコーディングを開発プロセスの標準として組み込む組織やプロジェクトが増えている。