Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
DOTYCZY: SDK wersja 4
W tym artykule opisano potencjalne zagrożenia bezpieczeństwa, gdy użytkownicy nawiązują połączenie z botem, na przykład za pomocą kontrolki czatu internetowego . Ponadto pokazuje rozwiązania korygujące przy użyciu rozszerzonych ustawień uwierzytelniania Direct Line i bezpiecznej obsługi identyfikatora użytkownika.
Istnieją dwie tożsamości użytkowników:
- Tożsamość użytkownika kanału. Osoba atakująca może jej użyć do personifikacji.
- Tożsamość użytkownika od dostawcy tożsamości używanego przez bota do uwierzytelniania użytkownika. Osoba atakująca może jej używać do fałszowania tożsamości.
Personifikacja
Personifikacja odnosi się do akcji osoby atakującej, która sprawia, że bot myśli, że jest kimś innym. Na przykład w rozmowie internetowej osoba atakująca może personifikować kogoś innego, zmieniając identyfikator użytkownika wystąpienia czatu internetowego.
Ochrona przed podszywaniem się
Uczyń identyfikator użytkownika niemożliwym do odgadnięcia.
Włącz rozszerzoną opcję uwierzytelniania kanału Direct Line, aby umożliwić usłudze Azure AI Bot Service dalsze wykrywanie i odrzucanie zmian identyfikatora użytkownika. Oznacza to, że identyfikator użytkownika (
Activity.From.Id
) w wiadomościach z Direct Line do bota będzie zawsze taki sam jak identyfikator użytkownika użyty do zainicjowania Web Chatu.Uwaga / Notatka
Direct Line tworzy token na podstawie tajnego klucza Direct Line i osadza
User.Id
w tokenie. Zapewnia, że komunikaty wysyłane do bota mają tenUser.Id
jakoFrom.Id
działania. Jeśli klient wysyła wiadomość do usługi Direct Line, mającą innąFrom.Id
wartość, zostanie ona zmieniona na identyfikator osadzony w tokenie przed przekazaniem wiadomości do bota. Zatem nie można użyć innego identyfikatora użytkownika po zainicjowaniu tajnego klucza kanału przy użyciu tego identyfikatora.Ta funkcja wymaga, aby identyfikator użytkownika rozpoczął się od
dl_
, jak pokazano poniżej.Wskazówka
W przypadku bota regionalnego ustaw wartość
dlUrl
zgodnie z wybranym regionem.
W przypadku wybrania europy ustaw wartość "https://europe.directline.botframework.com/v3/directline/tokens/generate".
W przypadku wybrania Indii ustaw wartość "https://india.directline.botframework.com/v3/directline/tokens/generate".
Aby uzyskać więcej informacji na temat regionalnych botów, zobacz Regionalizacja w usłudze 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); } }
Wygenerowany token oparty na tajnym kluczu Direct Line jest następnie używany w kontrolerze czatu w sieci, jak pokazano poniżej.
@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>
Fałszowanie tożsamości
Fałszowanie tożsamości odnosi się do akcji osoby atakującej, która zakłada tożsamość uprawnionego użytkownika, a następnie używa tej tożsamości do osiągnięcia złośliwego celu.
Gdy bot prosi użytkownika kanału A o zalogowanie się do dostawcy tożsamości, proces logowania musi zapewnić, że użytkownik A jest jedynym użytkownikiem, który loguje się do dostawcy. Jeśli inny użytkownik może również zalogować się do dostawcy, będzie miał dostęp do zasobów użytkownika A poprzez działanie bota.
Ograniczanie ryzyka fałszowania tożsamości użytkownika
W kontrolce Czat internetowy istnieją dwa mechanizmy zapewniające, że właściwy użytkownik jest zalogowany.
Kod magiczny. Na końcu procesu logowania użytkownik jest wyświetlany losowo wygenerowany 6-cyfrowy kod (kod magiczny). Aby ukończyć proces logowania, użytkownik musi wpisać ten kod w konwersacji. Ma to tendencję prowadzić do złej jakości doświadczenia użytkownika. Ponadto jest podatna na ataki phishingowe; złośliwy użytkownik może nakłonić innego użytkownika do zalogowania się i uzyskać magiczny kod.
Rozszerzone uwierzytelnianie Direct Line. Użyj rozszerzonego uwierzytelniania direct line, aby zagwarantować, że proces logowania można ukończyć tylko w tej samej sesji przeglądarki co klient czatu internetowego.
Aby włączyć tę ochronę, uruchom czat internetowy z tokenem direct line zawierającym listę zaufanych domen, które mogą hostować klienta czatu internetowego bota. Dzięki rozszerzonym opcjom uwierzytelniania można statycznie określić listę zaufanych domen (zaufanych źródeł) na stronie konfiguracji linii bezpośredniej. Zobacz sekcję Konfigurowanie rozszerzonego uwierzytelniania .