web-dev-qa-db-ja.com

安全なデザインパターンと一般的なコーディングガイドラインの違いは?

安全なデザインパターンと、テクノロジ固有のコーディングガイドラインを導き出すことができる一般的なコーディングガイドラインとの間に違いはありますか?

「認証」、「安全なセッション」、「入力検証」などのパターンは安全なパターンであり、コーディングガイドライン内で対処する必要があります。

それで、違いはありますか、それとも同じ「コンテンツ」の単なる別の定義ですか?

3
Th0mas

周りには複数の用語のバリエーションがあるため、絶対的な答えはありません。

「安全なデザインパターン」とは、厳格な正式なルールに十分従えば、開発者はセキュリティを実現できる類人猿であると信じる人々が使用する表現だと思います。 「コーディングガイドライン」は、開発者が「エンパワーメント」(およびバナナ)に最もよく対応していることを理解しているより現実的な人々によって採用され、ガイダンスが提供されればある程度のセキュリティを達成できる可能性があります。セキュリティの本当に重要な要件は、人々が自分のしていることを理解することです。

4
Tom Leek

「セキュリティ設計パターン」という用語は、通常、正しく適用されたときにセキュリティプロパティが保持されることを保証する設計手法を意味します。たとえば、 商標

コンピュータセキュリティの商標は、オブジェクトのセキュリティプロパティを検証するコードと、オブジェクトに特定のセキュリティプロパティがあることを要求するコードとの間の契約です。そのため、安全な情報の流れを確保するのに役立ちます。オブジェクト指向言語では、商標登録はデータの署名に類似していますが、多くの場合、暗号化なしで実装できます。

したがって、開発者はオブジェクトに商標を付け、情報隠蔽を使用して、他のモジュールが商標を偽造できないようにすることができます。次に、クライアントは、商標の存在(場合によってはinstanceofのように単純)が、実行時にプロパティが保持されることを意味することを確認できます。

たとえば、HTMLサニタイザーの出力とすべての入力をサニタイズするHTMLテンプレートは、既知の安全なHTMLとして商標登録されている場合があります。ダウンストリームコードは商標をチェックして、まだ疑わしい扱いが必要なコンテンツと、システム内で発生したコンテンツ、またはセキュリティドメインへのエントリ時にフィルタリングされたコンテンツを区別できます。


対照的に、コーディングガイドラインは

整形式や来歴などのセキュリティプロパティが保持されていることを確認する必要がある場合は、セキュリティエンジニアが作成したバリデータライブラリのいずれかを使用するか、入力に商標が含まれていることを確認して、プロパティが上流でチェックされたことを確認します。

このパターンは、特定のセキュリティプロパティを使用してオブジェクトまたはモジュールを設計する方法を説明し、ガイドラインは、コードでプロパティを維持する方法でそのプロパティを必要とするクライアントを示しています。

パターンは、不変条件と設計/ APIの決定との関係を説明しますが、ガイドラインは、開発者が効果的に作業を調整できるように、使用するプラクティスと時期を確立します。


情報隠蔽が弱いオブジェクト指向言語で作業する場合、オブジェクトの商標登録は難しいため、コーディングガイドラインは次のようになります。

商標を偽造しないでください。そうしないと、安全なカーネルチームがあなたを追い詰めます。

これは安全なデザインパターンの使用を推奨していませんが、従うと、セキュリティ契約に違反する言語機能の乱用を防ぐことにより、システムのセキュリティを向上させます。

1
Mike Samuel