ホームページ >バックエンド開発 >C++ >UNCパスと提供された資格情報を使用して、リモートの非トラストドメインで共有ファイルに安全にアクセスするにはどうすればよいですか?

UNCパスと提供された資格情報を使用して、リモートの非トラストドメインで共有ファイルに安全にアクセスするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-27 14:11:37585ブラウズ

リモート共有ファイルに安全にアクセス: UNC パスと資格情報を使用するガイド

このガイドでは、ドライブ マッピングや資格情報の複製などの安全性の低い方法に頼ることなく、UNC パスと提供された資格情報を使用して、リモートの信頼できないドメインにある共有ファイルに安全にアクセスするという課題に対処します。

How can I securely access a shared file on a remote, non-trusted domain using UNC paths and provided credentials?

問題: ドメイン間で共有リソースにアクセスするには、多くの場合認証が必要です。従来の方法ではセキュリティ上のリスクが生じます。

解決策: WNetUseConnection Win32 API

WNetUseConnection は安全な代替手段を提供します。これにより、永続的なドライブ マッピングを作成せずに、指定された資格情報を使用して UNC パス経由でリモート共有に接続できるようになります。 これにより、マップされたドライブに関連するセキュリティ上の危険が最小限に抑えられます。

仕組み:

API には以下が必要です:

  • NETRESOURCE 構造体: リモート リソースに関する詳細 (タイプ、名前など)。 重要なのは、これには UNC パスが含まれることです。
  • 資格情報: ユーザー名とパスワード。
  • フラグ: 接続動作を制御します (エラー処理など)。

UNC パスと資格情報を指定することにより、WNetUseConnection は一時的な接続を確立します。 ファイルはローカルであるかのようにアクセスできるようになります。 完了したら、WNetCancelConnection2.

を使用して接続を明示的に閉じる必要があります。

C# 実装例:

次の C# コードは、WNetUseConnectionWNetCancelConnection2 の使用方法を示しています。

<code class="language-csharp">using System.Runtime.InteropServices;

// ... other namespaces ...

public class RemoteFileAccess
{
    // ... (NETRESOURCE structure and error codes as before) ...

    [DllImport("Mpr.dll")]
    private static extern int WNetUseConnection(IntPtr hwndOwner, ref NETRESOURCE lpNetResource, string lpPassword, string lpUserID, int dwFlags, string lpAccessName, string lpBufferSize, string lpResult);

    [DllImport("mpr.dll")]
    private static extern int WNetCancelConnection2(string lpName, int dwFlags, bool fForce);


    public static bool ConnectToRemoteFile(string remoteUNC, string username, string password)
    {
        NETRESOURCE nr = new NETRESOURCE { lpRemoteName = remoteUNC, dwType = RESOURCETYPE_DISK };

        int ret = WNetUseConnection(IntPtr.Zero, ref nr, password, username, 0, null, null, null);
        return ret == NO_ERROR;
    }

    public static bool DisconnectFromRemoteFile(string remoteUNC)
    {
        int ret = WNetCancelConnection2(remoteUNC, 0, false);
        return ret == NO_ERROR;
    }

    // ... (GetError function as before) ...

    const int NO_ERROR = 0;
    const int ERROR_ACCESS_DENIED = 5;
    const int ERROR_BAD_NET_NAME = 53;
    const int ERROR_INVALID_PASSWORD = 1326;
    const int RESOURCETYPE_DISK = 1;
}</code>

潜在的なエラー (アクセス拒否、無効な資格情報など) を確実に処理することを忘れないでください。 リソースの解放が終了したら、必ず WNetCancelConnection2 を使用して切断します。 このアプローチは、従来の技術と比較して、リモート共有ファイルにアクセスするためのより安全な方法を提供します。

以上がUNCパスと提供された資格情報を使用して、リモートの非トラストドメインで共有ファイルに安全にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。