安全なプログラミングは、コンピュータ プログラムの設計、製造、使用のすべての段階でコンピュータのセキュリティを考慮することで構成されます。これは、セキュリティ ホールやその他のバグを可能な限り回避するのに役立ちます。
デザイン
たとえば、設計時には、モジュール方式でプログラムを設計し、必要なユーザー権限をできる限り少なくすることが問題になります。 1 つの大きなモノリシックプログラムよりも、複数の小さなプログラム、または相互に連携する小さなプログラムを用意する方が効果的です。
たとえば、DNS Bindサーバーとdjbdnsサーバーの設計を対比できます。 Bindはモノリシックな方法で設計されていますが、 djbdns は相互に作用するいくつかの異なるプログラムで構成されています。

実現
次に、運用中に、バッファ オーバーフロー、SQL インジェクション、書式設定文字列の不適切な使用の悪用 (書式文字列攻撃)、整数オーバーフローなどのすべての攻撃を回避するために、ユーザーが入力したデータを忘れずに検証する必要があります。一般的かつ最も重要な考え方は、ユーザーを決して信頼しないことです。自分で確認せずに入力について仮定を立てないでください (入力のサイズ、数値の符号など)。
適切な言語でプログラムを作成することも必要です。実際、一部の言語は他の言語よりもさまざまな形式のバグやその他のバッファ オーバーフローの影響を受けにくいものがあります。さらに、これらの言語には基本関数のライブラリがあるため、バグが発生する危険がある場合にユーザーが独自に書き直す必要がありません。

実行
最後に、実行中に、たとえば、さまざまなセキュリティ更新プログラムがリリースされたときにそれを適用することについて考える必要があります。これを行うには、アプリケーション設計者が簡素化されたアプリケーション更新システムを提案することが現実的かもしれません。
また、構成が簡単であり、デフォルト構成が可能な限り安全であることを保証するために、できる限りのことを行う必要があります。実際、ほとんどのユーザーはデフォルト設定をそのまま使用しています。

