Share via


IT 組織用のコード承認チェックリストのサンプル

Microsoft Office SharePoint Server 2007 に基づいた Web サイトには、カスタム ソリューションが含まれていることがあります。カスタム ソリューションを追加してサイトをカスタマイズする機能によって、Office SharePoint Server 2007 の能力と柔軟性が高まります。ただし、適切に設計または実装されていない実行可能モジュールが SharePoint ファームで実行されていると、そのターゲットである Web アプリケーションの範囲を超えて悪影響を及ぼす恐れがあります。 カスタム ソリューションが適切に実装されていない場合、セキュリティやパフォーマンス上のリスクが発生したり、サポートの費用が増加したりする恐れがあります。また、展開が困難になったり、生産性が低下することもあります。

SharePoint サーバー ファームにカスタム ソリューションをインストールした場合、良い影響を与えることも悪い影響を与えることもあります。このため、運用環境に展開する前に、すべてのカスタム ソリューションを注意深く評価することをお勧めします。次の領域について評価します。

開発者には、一般的なベスト プラクティスに従ってソリューションを開発することを要求するだけでなく、そのソリューションがベスト プラクティスに従ってコード化およびテストされているかどうかを確認するチェックリストを送信するように指示することをお勧めします。

企業を不必要なリスクにさらすことなく、展開するソリューションから意図したとおりの利益を確実に得られるようにするには、以下のサンプル コード承認チェックリストを使用します。このリストに基づいて、送信および展開するソリューションの質を確認する独自のチェックリストを作成します。コード承認チェックリストは、ソリューション展開後のチェックに使用するだけでなく、トレーニング ツールとしても使用できます。カスタマイズを実装する前に、開発者にこのリストを提供することにより、展開および送信されるソリューションの質について、開発者に事前に通知することができます。

重要

このサンプル チェックリストは、情報を提供する目的でのみ使用されます。このチェックリストにコード承認に関する問題が網羅されていると見なしたり、組織に追加の指標を適用する必要はないと見なすことはできません。このチェックリストでは、明示または黙示にかかわらず、いかなる保証も提供されません。

このトピックの内容 :

SharePoint 開発のベスト プラクティスのリソース

ここでは、有効性、サポート性、パフォーマンス、セキュリティといった IT 要件を満たすソリューションを設計および実装するために開発者に提供できるリソースの一覧を示しています。

コード承認チェックリスト

ここでは、コード承認チェックリストをセキュリティ、セッションの管理、検証、機密性の高いデータ、例外処理、Web パーツ、ドキュメント、およびソフトウェア開発の一般的なベスト プラクティスの各カテゴリに分けて説明します。印刷および変更が可能なバージョンのチェックリストについては、「Printable version of the code acceptance checklist」(https://go.microsoft.com/fwlink/?linkid=125134&clcid=0x411) を参照してください。

注意

このドキュメントで示されているチェックリストは、サンプルとして提供されています。このリストを使用して、企業のニーズを満たす独自のコード承認チェックリストを開発することができます。このリストに基づいて、独自のチェックリストを開発できます。

セキュリティ

コード承認チェックリストのこのセクションには、SharePoint 環境で送信および展開されるソリューションが、セキュリティのベスト プラクティスを使用して開発されていることを確認するための推奨項目が含まれています。

[ ]

アプリケーションでは、エクスクルード リスト (悪意のある、または危険な既知の入力が拒否される) ではなく、インクルード リスト (既知の有効で安全な入力) が使用されます。

[ ]

すべてのユーザー入力は、クライアントに表示される際に、IOSec でエンコードされます。

[ ]

文字エンコードがサーバーによって設定されます (ISO-8859-1 推奨)。

[ ]

プレーンテキストのパスワードは Web.config、Machine.config、または構成設定を含むファイルには示されません。Aspnet_setreg.exe や Trustee のようなユーティリティ、または IIS 6.0 や IIS 7.0 上の AppPool の ID 設定が、資格情報の暗号化に使用されます。

[ ]

機密性の高いデータが含まれている Cookie は、セキュリティ保護対象としてマークされます。

[ ]

Web パーツおよび他のカスタマイズの入力のセキュリティ対策には境界チェック、入力データの整合性チェック、およびクロスサイト スクリプトや SQL インジェクションから保護する適切な例外処理が含まれています。

[ ]

設計において、正規化に関する潜在的な問題に対応します。

[ ]

AllowUnsafeUpdates の使用は避けます。ValidateFormDigest()、および必要な場合は昇格された特権を使用して、SharePoint オブジェクトと対話します。AllowUnsafeUpdates を使用する必要がある場合は、try-catch-finally ブロックで AllowUnsafeUpdates が False に設定されていることを確認するか、Dispose() メソッド (IDisposable インターフェイスで必要) を使用してセキュリティ上の問題を回避します。

セッションの管理

コード承認チェックリストのこのセクションには、SharePoint 環境で送信および展開されるソリューションが、セッション管理のベスト プラクティスを使用して開発されていることを確認するための推奨項目が含まれています。

[ ]

セッション状態は強力かつ予測不能であり、許可されていないアクセスやリプレイ攻撃から保護されています。

[ ]

操作が行われていないセッションの有効期間は、最大で 30 分に制限されています。

[ ]

URL ではセッション識別子は渡されません。また、ASP.NET 機能 (Cookie を使用しないセッション) は使用されません。

[ ]

使用しない場合、セッション状態サービスは無効になります。

検証

コード承認チェックリストのこのセクションには、SharePoint 環境で送信および展開されるソリューションが、入力を検証するためのベスト プラクティスを使用して開発されていることを確認するための推奨項目が含まれています。

[ ]

入力時の検証は、フォーム フィールド、クエリ文字列、Cookie、HTTP ヘッダ、および Web サービス パラメータを含む、識別されたすべてのエントリ ポイントで実行されます。

[ ]

ASP.NET の validateRequest オプションが有効化されます (可能な場合)。

[ ]

データの型、長さ、形式、および範囲が検証されます。

[ ]

セキュリティは、クライアント側での検証に依存していません。代わりに、検証はサーバー側で実行されます。

[ ]

アプリケーションでは、RegEx のような標準化された入力時の検証が一貫して使用されます。

機密性の高いデータ

コード承認チェックリストのこのセクションには、SharePoint 環境で送信および展開されるソリューションが、機密性の高いデータを保護するためのベスト プラクティスを使用して開発されていることを確認するための推奨項目が含まれています。

[ ]

アプリケーションでは、機密性の高いデータはクリア テキストでログに記録されることはありません。

[ ]

機密性の高いデータは Cookie には保存されません。

[ ]

機密性の高いデータは、暗号化されていない隠しフォーム フィールドまたはクエリ文字列には保存されません。これらのデータは、サーバー側の状態管理を使用して保持されます。

[ ]

機密性の高いデータは、暗号化された SSL や IPSEC を使用することによって、または送信前にアプリケーション レイヤを暗号化することによって、送信中に保護されます。

[ ]

機密性の高いデータはキャッシュされません。既定では、出力キャッシュはオフになっています。

[ ]

電子メールを介して機密性の高いデータを送信する際には、指定した受信者に応じて、S/MIME 暗号化または Information Rights Management (IRM) が使用されます。

例外処理

コード承認チェックリストのこのセクションには、SharePoint 環境で送信および展開されるソリューションが、例外処理のベスト プラクティスを使用して開発されていることを確認するための推奨項目が含まれています。

[ ]

アプリケーションでは、エラーと例外処理の構造化について、標準化されたアプローチが使用されています。

[ ]

エラー処理コードは SPException クラスを継承しており、SharePoint のエラーについての操作性を一貫して維持しています。

[ ]

エラーや例外が発生すると、アプリケーションは安全に停止します。

[ ]

例外条件により、セキュリティ チェックを実行しないで特権コードを実行することはできません。

[ ]

アプリケーションによって、汎用カスタム エラー メッセージがクライアントに返されます。

[ ]

コードでは例外処理が使用されます。また、コードでは既知の例外のみが取得されます。たとえば、エラーを再度スローする場合を除き、try{} catch(Exception ex){} を使用しないでください。

[ ]

コードで例外フィルタを使用する場合、フィルタ実行シーケンスには準拠しません。フィルタは finally ブロックよりも前に実行されます。

[ ]

アプリケーション エラーには、機密性の高い情報、または障害の悪用に使用される可能性がある情報は含まれていません。

Web パーツ

コード承認チェックリストのこのセクションには、SharePoint 環境で送信および展開されるソリューションが、Web パーツ開発のためのベスト プラクティスを使用して開発されていることを確認するための推奨項目が含まれています。

[ ]

リソース ファイルを含むカスタム Web パーツは、SharePoint 機能内に格納されており、展開用に SharePoint ソリューションとしてパッケージ化されています。

[ ]

管理者は、展開する Web パーツを自由に構成して、Web アプリケーション レベルまたはそれよりも低いレベルに柔軟に展開することができます。

[ ]

SharePoint Web パーツ インフラストラクチャの標準化された接続インターフェイスを Web パーツに使用して、実行時に情報を互いに交換することができます。

[ ]

可能な場合は、技術サポートの質を高めるために、サード パーティの Web パーツ ソリューションのソース コードが適切なドキュメントに提供されます。

[ ]

シングル サインオンや機能の展開といった機能の動作をアプリケーション間で一定にするため、すべてのカスタム Web パーツで SharePoint アーキテクチャが利用されます。

ドキュメント

展開するように求められるカスタマイズがインストール可能であること、およびサポート可能であることを確認するには、またカスタマイズのテストが的確に実行されるようにするには、適切なドキュメントが必要です。さらに、ドキュメントには、カスタマイズによって生成されたすべてのエラーが適切に説明されていること、およびそれらが診断されることが示されます。 コード承認チェックリストのこのセクションには、SharePoint 環境で送信および展開されるソリューションが、ドキュメントのベスト プラクティスを使用して開発されていることを確認するための推奨項目が含まれています。

[ ]

カスタマイズには、パッケージのインストール方法およびアンインストール方法を説明したインストール手順が添付されます。ソリューションのインストールに関連するアーキテクチャ図も含まれます。ソリューションをロールバックできない場合は、そのリスクについて議論し、システム回復の計画を準備できるように、ロールバックできないことをインストール手順で説明する必要があります。

[ ]

カスタマイズには、テスト ドキュメントと結果が添付されます。

[ ]

カスタマイズには、全依存関係のリストが添付されます。また、アカウント/パスワード、Web サービス、データベース、他のソリューションや機能、更新プログラム、ツール セットやライブラリ、および他の依存関係が含まれることもあります。

[ ]

カスタマイズによって生成されるすべてのイベント エントリ、および実行されるアクションのリストが提供されます。これは、エラー コード表の形式で提供されることがあります。エラー コード表では、各コードの重要度と根本的な原因が示されます。

[ ]

また、IT 組織による検証とテストが効率よく実行されるように、ソース コードが提供されることもあります。

[ ]

カスタマイズが、以前に展開したカスタマイズのアップグレードである場合、その変更点、カスタマイズのアップグレードに関する考慮事項、およびロールバック手順について説明するドキュメントが添付されます。

ソフトウェア開発の一般的なベスト プラクティス

コード承認チェックリストのこのセクションには、SharePoint 環境で送信および展開されるソリューションが、ソフトウェア開発のベスト プラクティスを使用して開発されていることを確認するための推奨項目が含まれています。

[ ]

アセンブリには厳密な名前が付けられています。現在、動的に生成された ASP.NET Web ページ アセンブリに厳密な名前を付けることはできません。

[ ]

厳密な名前および署名処理で使用される秘密キーを保護および制限する方法として、遅延署名を使用します。

[ ]

アセンブリには、最小限の権限の要件を指定する宣言セキュリティ属性 (SecurityAction.RequestMinimum を使用) が含まれています。

[ ]

高い特権を持つアセンブリは、低い特権を持つアセンブリから切り離されています。

[ ]

部分的に信頼された環境 (たとえば、部分的に信頼された Web アプリケーションから呼び出されます) でアセンブリを使用する場合、特権コードは別のアセンブリに格納されます。

[ ]

Web.config の構成を変更する代わりに、アプリケーションをサポートする固有の構成ファイルを信頼します。

[ ]

.NET Framework 2.0、3.0、または 3.5 を使用します。

[ ]

単一の .NET Framework バージョンを使用します。複数のバージョンを同時に使用しません。

[ ]

コードは 64 ビット互換です。

[ ]

アプリケーションは、SharePoint データベースに直接アクセスしようとしません。SharePoint データベース内のデータ ストアは、SharePoint オブジェクト モデルでのみ更新されます。

[ ]

ハード コーディング文字列およびラベルを回避します。代わりに、リソースまたは言語ファイルを使用します。

[ ]

SPWeb オブジェクトまたは SPSite オブジェクトを参照する際には、usingステートメントを使用します。または, .Dispose メソッドの明示的な呼び出しを使用して、メモリ オブジェクトを正しく使用および破棄することができます。

[ ]

必要に応じてキャッシュを使用し、不必要なラウンド トリップを減らします。Web パーツでは、キャッシュの有効期限 (期間) を Web パーツのプロパティとして公開します。

[ ]

ソリューションをパッケージ化する際には、ソリューションのコード アクセス セキュリティ ポリシーを含めます。また、必要な場合は、ソリューションの安全なコントロール リストにアセンブリを含めます。

[ ]

コードをログに記録する際には、Portal Log クラスを使用して、SharePoint 統合ログ サービス (ULS) ログをログに記録することができます。

[ ]

リモート コードを使用して複数のリスト アイテムを更新する必要がある場合、Web サービスを使用してリスト アイテムを更新します。ローカルの OM ベースのコードを使用して、一度に複数のアイテムを更新する必要がある場合は、SPListItem.Update() のみを使用します。

[ ]

SPListItemCollection の Count プロパティを使用する場合は、一度だけ呼び出して、ループ時に参照できる変数にそれを保存します。このプロパティは、ループ内で呼び出さないでください。

[ ]

ソリューションでは、AppSettings オブジェクトを使用して XML マッピングが実装されます。それには, .NET 2.0、3.0、または 3.5 で、パーシスタンス フレームワークの設定を使用します。ソリューションでは、XML マッピングにカスタム XML ファイルおよび型指定されたオブジェクトは作成されません。

[ ]

インストールおよび展開のログはイベント ログに記録されます。このため、インストールおよびアンインストール中に、運用上のトラブルシューティングを適切に行うことができます。

このブックをダウンロードする

このトピックは、簡単に読んだり印刷したりできるように、次のダウンロード可能なブックに収められています。

利用可能なすべてのブックの一覧を参照する場合は、「Office SharePoint Server 2007 のダウンロード可能なブック」にアクセスしてください。