適用於: SDK v4
本文說明用戶連線到 Bot 時的潛在安全性風險,例如使用 網路聊天 控制件。 此外,它也會顯示使用 Direct Line 增強驗證設定 和保護 使用者標識碼 處理的緩和解決方案。
有兩個使用者身分識別:
模仿
冒充是指攻擊者執行的動作,使 Bot 誤以為他們是其他人。 例如,在網路聊天中,攻擊者可以藉由變更網路聊天實例 的使用者標識碼 來模擬其他人。
冒充風險緩解
讓使用者識別碼 無法辨解。
啟用 Direct Line 通道的 增強驗證 選項,以允許 Azure AI Bot 服務進一步偵測和拒絕任何使用者識別碼變更。 這表示從 Direct Line 到 Bot 的訊息上,使用者識別碼 (
Activity.From.Id
) 一律與您用來初始化網路聊天控制件的使用者識別碼相同。備註
Direct Line 會根據 Direct Line 秘密建立 令牌 ,並將內嵌
User.Id
在令牌中。 它會確保傳送至 Bot 的訊息中,User.Id
被用作活動的From.Id
。 如果用戶端將訊息傳送至具有不同From.Id
的 Direct Line,則會在將訊息轉送至 Bot 之前,將它變更為 內嵌在令牌中的 標識碼。 因此,在使用該使用者識別碼初始化信道私密之後,您無法使用其他使用者識別碼。此功能需要使用者標識碼以 開頭
dl_
,如下所示。小提示
針對區域 Bot,請根據選取的區域進行設定
dlUrl
。
如果選取了歐洲,請設定 “https://europe.directline.botframework.com/v3/directline/tokens/generate"。
如果選取印度,請設定 “https://india.directline.botframework.com/v3/directline/tokens/generate"。
如需區域 Bot 的詳細資訊,請參閱 Azure AI Bot Service 中的區域化。public class HomeController : Controller { private const string secret = "<TODO: DirectLine secret>"; private const string dlUrl = "https://directline.botframework.com/v3/directline/tokens/generate"; public async Task<ActionResult> Index() { HttpClient client = new HttpClient(); var userId = $"dl_{Guid.NewGuid()}"; HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, dlUrl); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", secret); request.Content = new StringContent( JsonConvert.SerializeObject( new { User = new { Id = userId } }), Encoding.UTF8, "application/json"); var response = await client.SendAsync(request); string token = String.Empty; if (response.IsSuccessStatusCode) { var body = await response.Content.ReadAsStringAsync(); token = JsonConvert.DeserializeObject<DirectLineToken>(body).token; } var config = new ChatConfig() { Token = token, UserId = userId }; return View(config); } }
產生的令牌會根據 Direct Line 密碼進行生成,並接著用於網頁聊天控制項,如下所示:
@model Bot_Auth_DL_Secure_Site_MVC.Models.ChatConfig @{ ViewData["Title"] = "Home Page"; } <div id="webchat" role="main" /> <head> <script src="https://cdn.botframework.com/botframework-webchat/latest/webchat.js"></script> </head> <body> <script> window.WebChat.renderWebChat({ directLine: window.WebChat.createDirectLine({ token: '@Model.Token' }), userID: '@Model.UserId' }, document.getElementById('webchat')); </script> </body>
身分偽造
身分識別詐騙是指攻擊者的動作,該攻擊者假設合法使用者的身分識別,然後使用該身分識別來完成惡意目標。
當 Bot 要求通道使用者 A 登入識別提供者時,登入程式必須確保使用者 A 是唯一登入提供者的使用者。 如果另一位使用者也允許登入提供者,他們就能透過 Bot 存取使用者 A 資源。
使用者身分冒充防範措施
在網路聊天控制件中,有兩種機制可確保適當的使用者已登入。
Magic Code。 在登入程序結束時,使用者會看到隨機產生的6位數代碼(magiccode)。 用戶必須在交談中輸入此程序代碼,才能完成登入程式。 這可能會導致用戶體驗不佳。 此外,它很容易遭受網路釣魚攻擊;惡意使用者可以欺騙其他使用者登入並取得魔術程序代碼。
Direct Line 增強驗證。 使用 Direct Line 增強驗證來確保登入程式只能在與網路聊天用戶端 相同的瀏覽器會話 中完成。
若要啟用此保護,請使用 Direct Line 令牌啟動網路聊天,其中包含 可裝載 Bot 網路聊天用戶端的信任網域清單。 使用增強的驗證選項,您可以在 [Direct Line 組態] 頁面中,以靜態方式指定受信任的網域 (受信任來源) 清單。 請參閱 設定增強式驗證 一節。