Windows開発のためのセキュリティと責任ある AI

AI ツールを使用すると、アプリ開発Windows大幅に高速化できますが、速度によって責任が取り除かれるわけではありません。 AI エージェントによって生成されるコードは、出荷するコードであり、アプリの記述方法に関係なく、アプリ内のすべてのことに対する責任を負います。

このページでは、AI ツール を使用して アプリを構築するための責任あるプラクティスと、AI によって生成されたコードに固有のセキュリティの問題という 2 つの関連トピックについて説明します。

コードを所有している

AI エージェントが関数、レイアウト、または API 呼び出しを生成すると、コミットした瞬間にコードになります。 コードが手動で記述されたか生成されたかに関係なく、同じ標準が適用されます。

  • 受け入れる前に、すべての変更を読んで理解する
  • AI によって生成されたコードを、少なくとも手書きのコードと同じくらい徹底的にテストします。モデルは、微妙に間違っている、見栄えの良いコードを生成する可能性があります
  • 運用環境のバグやセキュリティの問題の説明として "AI によって書き込まれる" を使用しないでください

AI ツールでは、コード レビューの必要性は解消されません。 レビューするかどうかではなく、レビュー内容が変更されます。

AI ツールに送信しないもの

プロンプトとコンテキスト ウィンドウに含める内容については、慎重に検討してください。

  • シークレットと資格情報 - API キー、パスワード、または接続文字列をプロンプトに貼り付けることはありません。 プライベート チャット セッションでも、プロンプトの資格情報はセキュリティ 上のリスクであり、ログに表示される可能性があります。 以下の 「資格情報とシークレットの処理」 を参照してください。
  • 顧客データと PII — 実際の顧客名、電子メール、または使用状況データを入力例として使用しないでください。バグを説明する場合も同様です。 合成データを使用します。
  • 独自のビジネス ロジック - 内部システム コードを共有する前に、外部 AI サービスに送信できるソース コードに関する組織のポリシーを理解します。

入力の検証

AI は、許容される入力処理を生成する傾向があります。 ユーザー入力に対応する前に、長さ、型、および範囲を常に検証してください。

  • シェル コマンド、ファイル パス、またはデータベース クエリに生の TextBox.Text 値を渡すことはありません。
  • ストレージに書き込む前またはネットワーク経由で送信する前に、文字列の長さを検証します。
  • ファイル パスには許可リストアプローチを使用します。解決されたパスが想定されるディレクトリ内に留まるかどうかを確認します。

"入力の検証と長さの制限をすべてのユーザー向けフィールドに追加する" というプロンプトに追加します

資格情報とシークレットの処理

API キー、パスワード、または接続文字列をハードコーディングしないでください。 AI では、多くの場合、 "your-api-key-here" のようなプレースホルダー文字列が生成されます。これらはバグとして扱われます。

  • 資格情報を Windows.Security.Credentials.PasswordVault に格納します。

    var vault = new PasswordVault();
    vault.Add(new PasswordCredential("MyApp", username, password));
    
  • 実行時にそれらを取得します。

    var credential = vault.Retrieve("MyApp", username);
    credential.RetrievePassword();
    
  • サーバー側または CI シナリオでのサービス資格情報には、環境変数またはAzure Key Vaultを使用します。

パッケージと依存関係の整合性

AI エージェントが提案するすべての NuGet パッケージを確認してから、プロジェクトに追加します。

  • nuget.org の発行元を確認します。青色のシールド (Microsoft) または既知の発行元を探します。
  • 既知の脆弱性をスキャンします。
    dotnet list package --vulnerable
    
  • 最新の更新プログラムとアクティブなメンテナンスを含むパッケージを優先します。

アプリの機能とアクセス許可

AI によって生成される Package.appxmanifest ファイルには、多くの場合、広範な機能が含まれます。 <Capabilities>セクションを確認し、アプリに不要なものをすべて削除します。

注意すべき一般的な過度に広範な機能:

  • broadFileSystemAccess — アプリが任意のファイル システム パスを純粋に読み取る場合にのみ必要です
  • documentsLibrary — Store の特別な承認が必要です。必要な場合を除き、避けてください
  • userAccountInformation — ユーザーの名前または写真が必要な場合のみ

コード レビューチェックリスト

AI で生成されたコードを出荷する前に、次のことを確認します。

  • ハードコーディングされたシークレットまたは資格情報がない
  • 使用前に検証されたユーザー入力
  • 許可されたディレクトリと照合されたファイルパス
  • マニフェストで宣言されている最低限必要な機能
  • 脆弱性がスキャンされた NuGet パッケージ (dotnet list package --vulnerable)
  • 機密データはPasswordVaultに保存されており、ApplicationData.LocalSettingsには保存されていません
  • すべてのネットワーク呼び出しで HTTPS が使用されます
  • 例外メッセージが内部パスまたはスタック トレースをユーザーに公開しない

AI モデルに古い知識がある

現在お使いの AI ツールは、ある時点までのデータを使って学習されています。 Windows開発の場合、これは、モデルが WinUI 3 サンプルよりもはるかに多くの UWP サンプルを見たことを意味します。これは、このドキュメント セクションが存在する正確な理由です。

AI の出力は、次の場合に権限のあるものとして扱わない。

  • 現在の API 名と名前空間 ( WinUI 3 API リファレンスに対する検証)
  • 現在の SDK のバージョンとパッケージ名
  • ポリシーと提出の要件を保存する (これらの変更が頻繁に行われる)
  • セキュリティ ガイダンス (モデルでは、古い暗号化または認証パターンが再現される場合があります)

Microsoft Learn MCP サーバーWinUI エージェント プラグインは、最新のドキュメントでエージェントを基にして古い知識を軽減しますが、プライマリ ソースに対してセキュリティが重要なことを常に確認します。

Accessibility

AI によって生成される UI では、アクセシビリティのサポートが頻繁に省略されます。 何百万もの XAML サンプルでトレーニングされたモデルは、これらのサンプルの平均品質を再現します。また、従来の平均では、 AutomationProperties、キーボード ナビゲーション、十分なコントラストがスキップされます。

AI によって生成された XAML またはコントロール コードを受け入れる場合:

  • 対話型要素に AutomationProperties.AutomationIdAutomationProperties.Name が設定されていることを確認する
  • フォーカスの順序が論理的であることを確認する - タブ位置は読み取り順序に従う必要がある
  • 出荷前にナレーターまたは別のスクリーン リーダーでテストする
  • Accessibility Insights for Windows ツールを使用して、ギャップを自動的にキャッチする

この XAML 内のすべての対話型要素にアクセシビリティ プロパティを追加する」 とエージェントに明示的に問い合わせてください。完了したと想定しないでください。

アプリで AI 機能を使用する場合

AI を使用してアプリを作成するだけでなく、アプリに AI 機能を組 み込 む場合は、追加の責任が適用されます。

ユーザーに対して透明性を保つ。 ユーザーに通知する:

  • アプリが AI サービスに送信するデータ
  • AI がそれらに影響を与える意思決定を行っているかどうか
  • 必要に応じてオプトアウトする方法

人間をループ内に置き、結果的なアクションを実行します。 明示的な確認なしに、AI が自律的にデータを削除したり、購入したり、ユーザーに代わってメッセージを送信したり、その他の元に戻せないアクションを実行したりしないでください。

バイアスと予期しない出力をテストします。 AI モデルでは、偏り、攻撃的、または事実上間違った出力が生成される可能性があります。 出荷する前に、さまざまな入力とエッジ ケースでアプリの AI 機能をテストします。

コンテンツの安全性ツールを使用する。 アプリが AI を使用してユーザー向けのテキスト、画像、またはその他のコンテンツを生成または処理する場合は、Azure AI Content Safety または同等のフィルター処理を使用して、ユーザーに到達する前に有害な出力をキャッチします。

ライセンスと帰属表示

AI ツールは、既存のオープンソース コードに似たコードを生成する場合があります。 商用アプリで AI によって生成されたコードを使用する前に、次の手順を実行します。

Microsoft の責任ある AI の原則

Microsoftは、公平性、信頼性と安全性、プライバシーとセキュリティ、包括性、透明性、アカウンタビリティの 6 つの原則に基づく AI 製品と機能を設計します。

詳細については、 microsoft.com/ai/responsible-ai を参照してください。