Porady dotyczące zabezpieczeń firmy Microsoft 3137909
Luki w zabezpieczeniach w szablonach ASP.NET mogą zezwalać na manipulowanie
Opublikowano: 9 lutego 2016 r. | Zaktualizowano: 10 lutego 2016 r.
Wersja: 1.1
Streszczenie
Firma Microsoft publikuje ten biuletyn zabezpieczeń, aby udostępnić informacje o lukach w zabezpieczeniach w publicznych wersjach programu Visual Studio 2013, Visual Studio 2015, ASP.NET MVC5 i ASP.NET MVC6. Ten poradnik zawiera również wskazówki dotyczące tego, co deweloperzy mogą zrobić, aby zapewnić, że utworzone kontrolki i składniki nie podlegają lukom w zabezpieczeniach.
Firma Microsoft zdaje sobie sprawę z luki w zabezpieczeniach w publicznych wersjach programów Visual Studio 2013 i Visual Studio 2015, które mogą być używane w scenariuszu fałszowania żądań między witrynami (CSRF) w przypadku aplikacji internetowych utworzonych przy użyciu szablonów projektów ASP.NET, których dotyczy problem. Szablony projektów MVC5 i ASP.NET MVC6 firmy Microsoft ASP.NET są używane przez deweloperów oprogramowania jako szablony początkowe dla nowych aplikacji internetowych.
Czynniki korygujące
- Uwierzytelnianie dwuskładnikowe (2FA) nie jest domyślnie włączone w żadnych wygenerowanych aplikacjach. Jeśli deweloper nie włączył uwierzytelniania 2FA na podstawie numeru telefonu użytkownika, nie ma wpływu na bezpieczeństwo, jeśli numer telefonu zostanie usunięty.
Porady — często zadawane pytania
Jak osoba atakująca może wykorzystać tę lukę w zabezpieczeniach?
Osoba atakująca może użyć fałszerzowania żądania obejmującego wiele witryn (CSRF), aby wysłać żądanie do aplikacji internetowej wygenerowanej przy użyciu szablonów podatnych na zagrożenia, a następnie usunąć uwierzytelniony numer telefonu użytkownika z bazy danych tożsamości ASP.NET. Wynikiem wykorzystanej luki w zabezpieczeniach jest usunięcie dowolnego mechanizmu uwierzytelniania dwuskładnikowego (2FA), który opiera się na numerze telefonu. Nie ma to wpływu na hasło użytkownika.
Co robi aktualizacja?
Aktualizacja poprawia szablony projektów programu Visual Studio 2015 ASP.NET dla MVC5 i MVC6.
Aktualizacje szablonu mają wpływ tylko na nowe aplikacje. Z tego powodu firma Microsoft zdecydowanie zaleca, aby deweloperzy, którzy utworzyli aplikacje internetowe przy użyciu tych szablonów, podejmowali natychmiastowe działania wymienione w sekcji Sugerowane akcje , aby ocenić swoje aplikacje internetowe pod kątem narażenia na lukę w zabezpieczeniach, a następnie użyć obejść w tej sekcji, aby wprowadzić zmiany kodu w celu zaktualizowania aplikacji w celu ochrony ich przed zagrożeniami.
Jeśli używasz programu Visual Studio 2013, musisz użyć kroków obejścia wymienionych w sekcji Sugerowane akcje , aby ręcznie zaktualizować aplikacje za każdym razem, gdy użyto szablonów, których dotyczy problem.
Jak mogę zastosować aktualizację?
- Uruchom program Visual Studio.
- W menu Narzędzia wybierz pozycję Rozszerzenia i Aktualizacje.
- Rozwiń drzewo Aktualizacje.
- W obszarze Product Aktualizacje znajdź następujące dwa wpisy:
- Microsoft ASP.NET i narzędzia sieci Web
- Microsoft ASP.NET Web Frameworks and Tools
- Wybierz każdą aktualizację i kliknij przycisk Aktualizuj.
Sugerowane akcje
Poniższe informacje o obejście zawierają szczegółowe informacje o zmianach, które należy wprowadzić do istniejących aplikacji utworzonych na podstawie szablonów projektów ASP.NET.
Visual Studio 2015 MVC 5 i Visual Studio 2013 MVC 5
Dla języka C#
Z katalogu Controllers załaduj ManageController.cs.
Wyszukaj ciąg Remove Telefon Number() (wiersz 199).
Kod szablonu bez żadnego dostosowania zostanie wyświetlony w następujący sposób:
public async Task<actionresult> RemovePhoneNumber() { var result = await UserManager.SetPhoneNumberAsync(User.Identity.GetUserId(), null); if (!result.Succeeded) { return RedirectToAction("Index", new { Message = ManageMessageId.Error }); } var user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); if (user != null) { await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); } return RedirectToAction("Index", new { Message = ManageMessageId.RemovePhoneSuccess }); }
Dodaj atrybuty [HttpPost] i [ValidateAntiForgeryToken] do definicji funkcji, aby kod był wyświetlany w następujący sposób:
[HttpPost] [ValidateAntiForgeryToken] public async Task</actionresult><actionresult> RemovePhoneNumber() { var result = await UserManager.SetPhoneNumberAsync(User.Identity.GetUserId(), null); if (!result.Succeeded) { return RedirectToAction("Index", new { Message = ManageMessageId.Error }); } var user = await UserManager.FindByIdAsync(User.Identity.GetUserId()); if (user != null) { await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); } return RedirectToAction("Index", new { Message = ManageMessageId.RemovePhoneSuccess }); }
W folderze Views/Manage załaduj plik Index.cshtml.
Wyszukaj ciąg <dt> Telefon Number:</dt> (wiersz 40)
Kod szablonu bez żadnego dostosowania jest wyświetlany w następujący sposób:
<dt>Phone Number:</dt>
Zmień kod widoku, aby był wyświetlany w następujący sposób:
<dt>Phone Number:</dt>
using (Html.BeginForm("Remove Telefon Number", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { @Html.AntiForgeryToken() } } inne { }
- Ponownie skompiluj aplikację, a następnie ponownie ją wdróż.
Dla języka Visual Basic
Z katalogu Controllers załaduj ManageController.cs.
Wyszukaj ciąg Remove Telefon Number() (wiersz 164).
Kod szablonu bez żadnego dostosowania jest wyświetlany w następujący sposób:
Public Async Function RemovePhoneNumber() As Task(Of ActionResult) Dim result = Await UserManager.SetPhoneNumberAsync(User.Identity.GetUserId(), Nothing) If Not result.Succeeded Then Return RedirectToAction("Index", New With { .Message = ManageMessageId.[Error] }) End If Dim userInfo = Await UserManager.FindByIdAsync(User.Identity.GetUserId()) If userInfo IsNot Nothing Then Await SignInManager.SignInAsync(userInfo, isPersistent:=False, rememberBrowser:=False) End If Return RedirectToAction("Index", New With { .Message = ManageMessageId.RemovePhoneSuccess }) End Function
<Dodaj atrybuty HttpPost> i <ValidateAntiForgeryToken> do definicji funkcji, aby były wyświetlane w następujący sposób:
<httppost>
Z folderu Views/Manage załaduj plik Index.vbhtml.
<Wyszukaj ciąg dt> Telefon Number:</dt> (wiersz 37)
Kod szablonu bez żadnego dostosowania jest wyświetlany w następujący sposób:
<dt>Phone Number:</dt>
Zmień kod widoku, aby był wyświetlany w następujący sposób:
<dt>Phone Number:</dt>
@ @Using Html.BeginForm("Remove Telefon Number", "Manage", FormMethod.Post, New With {.class = "form-horizontal", .role = "form"}) @Html.AntiForgeryToken @ End using Else @ End If
- Ponownie skompiluj aplikację, a następnie ponownie ją wdróż.
Visual Studio 2015 MVC 6
Dla języka C#
Z katalogu Controllers załaduj ManageController.cs.
Wyszukaj ciąg Remove Telefon Number() (wiersz 178).
Kod szablonu bez żadnego dostosowania jest wyświetlany w następujący sposób:
// GET: /Manage/RemovePhoneNumber [HttpGet] public async Task<iactionresult> RemovePhoneNumber() { var user = await GetCurrentUserAsync(); if (user != null) { var result = await _userManager.SetPhoneNumberAsync(user, null); if (result.Succeeded) { await _signInManager.SignInAsync(user, isPersistent: false); return RedirectToAction(nameof(Index), new { Message = ManageMessageId.RemovePhoneSuccess }); } } return RedirectToAction(nameof(Index), new { Message = ManageMessageId.Error }); }
Usuń atrybut [HttpGet], a następnie dodaj atrybuty [HttpPost] i [ValidateAntiForgeryToken] do definicji funkcji, aby kod był wyświetlany w następujący sposób:
[HttpPost] [ValidateAntiForgeryToken] public async Task</iactionresult><iactionresult> RemovePhoneNumber() { var user = await GetCurrentUserAsync(); if (user != null) { var result = await _userManager.SetPhoneNumberAsync(user, null); if (result.Succeeded) { await _signInManager.SignInAsync(user, isPersistent: false); return RedirectToAction(nameof(Index), new { Message = ManageMessageId.RemovePhoneSuccess }); } } return RedirectToAction(nameof(Index), new { Message = ManageMessageId.Error }); }
W folderze Views/Manage załaduj plik Index.cshtml.
Całkowicie zastąp plik widoku, tak aby był wyświetlany w następujący sposób:
@model IndexViewModel @{ ViewData["Title"] = "Manage your account"; } <h2>@ViewData["Title"].</h2>
@ViewData["StatusMessage"]
<div>
Zmienianie ustawień konta
- Hasło:
- @if (Model.HasPassword) { } else { }
- Identyfikatory logowania zewnętrznego:
- @Model.Logins.Count [ Zarządzanie ]
- Numer telefonu:
-
Telefon Numbers może służyć jako drugi czynnik weryfikacji w uwierzytelnianiu dwuskładnikowym.
Zobacz ten artykuł , aby uzyskać szczegółowe informacje na temat konfigurowania tej aplikacji ASP.NET do obsługi uwierzytelniania dwuskładnikowego przy użyciu programu SMS.
@*@(Model. Telefon Number ?? "Brak") @if (Model.TelefonLiczba != null) {
} else { }* @ - Uwierzytelnianie dwuskładnikowe:
- Nie skonfigurowano żadnych dostawców uwierzytelniania dwuskładnikowego. Zobacz ten artykuł , aby skonfigurować tę aplikację do obsługi uwierzytelniania dwuskładnikowego. @*@if (Model.TwoFactor) { } else { }* @
- Ponownie skompiluj aplikację, a następnie ponownie ją wdróż.
Dla języka Visual Basic
- ASP.Net Core (wcześniej ASP.NET 5) nie obsługuje języka Visual Basic.
Dodatkowe sugerowane akcje
Pobierz aktualizacje narzędzia programu Visual Studio bezpośrednio pod adresem:
Ochrona komputera
Zachęcamy klientów do przestrzegania naszych wskazówek dotyczących włączania zapory, pobierania aktualizacji oprogramowania i instalowania oprogramowania antywirusowego przez klientów. Aby uzyskać więcej informacji, zobacz Microsoft Sejf ty & Security Center.Aktualizowanie oprogramowania firmy Microsoft
Użytkownicy z oprogramowaniem firmy Microsoft powinni zastosować najnowsze aktualizacje zabezpieczeń firmy Microsoft, aby upewnić się, że ich komputery są tak chronione, jak to możliwe. Jeśli nie masz pewności, czy oprogramowanie jest aktualne, odwiedź witrynę Microsoft Update, przeskanuj komputer pod kątem dostępnych aktualizacji i zainstaluj wszelkie oferowane aktualizacje o wysokim priorytcie. Jeśli włączono automatyczne aktualizowanie i skonfigurowano do udostępniania aktualizacji produktów firmy Microsoft, aktualizacje są dostarczane do Ciebie po ich wydaniu, ale należy sprawdzić, czy są zainstalowane.
Inne informacje
Opinia
- Możesz przekazać opinię, wypełniając formularz Pomoc i obsługa techniczna firmy Microsoft, skontaktuj się z nami.
Pomoc techniczna
- Klienci w Stany Zjednoczone i Kanadzie mogą otrzymywać pomoc techniczną od działu pomocy technicznej ds. zabezpieczeń. Aby uzyskać więcej informacji, zobacz Pomoc i obsługa techniczna firmy Microsoft.
- Klienci międzynarodowi mogą otrzymywać pomoc techniczną od swoich lokalnych spółek zależnych firmy Microsoft. Aby uzyskać więcej informacji, zobacz International Support (Pomoc techniczna międzynarodowa).
- Microsoft TechNet Security zawiera dodatkowe informacje na temat zabezpieczeń w produktach firmy Microsoft.
Zastrzeżenie
Informacje podane w tym poradniku są dostarczane "tak, jak jest" bez gwarancji jakiegokolwiek rodzaju. Firma Microsoft nie udziela wszelkich gwarancji, wyraźnych lub domniemanych, w tym gwarancji możliwości handlowych i przydatności do określonego celu. W żadnym wypadku Firma Microsoft Corporation lub jej dostawcy nie ponosi odpowiedzialności za wszelkie szkody, w tym bezpośrednie, pośrednie, przypadkowe, wtórne, utratę zysków biznesowych lub szkody specjalne, nawet jeśli firma Microsoft Corporation lub jej dostawcy zostali poinformowani o możliwości takich szkód. Niektóre państwa nie zezwalają na wyłączenie lub ograniczenie odpowiedzialności za szkody wtórne lub przypadkowe, więc powyższe ograniczenie może nie mieć zastosowania.
Poprawki
- Wersja 1.0 (9 lutego 2016 r.): Biuletyn został opublikowany.
- Wersja 1.1 (10 lutego 2016 r.): Biuletyn został zaktualizowany w celu uwzględnienia informacji o pobieraniu dla platform Microsoft ASP.NET Web Framework oraz narzędzi i narzędzi firmy Microsoft ASP.NET i narzędzi sieci Web. Jest to tylko zmiana informacyjna.
Strona wygenerowana 2016-02-19 14:36-08:00.