Udostępnij za pośrednictwem


Szybki start: Analizator zabezpieczeń (wersja zapoznawcza)

GitHub Copilot pomaga deweloperom identyfikować i usuwać typowe zagrożenia bezpieczeństwa w kodzie SQL i zapytaniach w warstwie aplikacji. Może ona pomóc wykrywać luki w zabezpieczeniach, takie jak wstrzyknięcie kodu SQL, nadmiernie uwidoczone dane i niebezpieczne wzorce, zwłaszcza dla deweloperów bez silnego tła zabezpieczeń, zapewniając praktyczne, kontekstowe zalecenia podczas opracowywania.

Rozpocznij

Upewnij się, że masz połączenie z bazą danych i masz otwarte aktywne okno edytora z rozszerzeniem MSSQL. To połączenie umożliwia uczestnikowi czatu @mssql zrozumienie kontekstu środowiska bazy danych, umożliwiając dokładne i kontekstowe sugestie. Bez połączenia z bazą danych uczestnik czatu nie będzie miał schematu ani kontekstu danych w celu zapewnienia znaczących odpowiedzi.

W poniższych przykładach użyto przykładowej bazy danych AdventureWorksLT2022, którą można pobrać ze strony głównej Przykładów i projektów społeczności programu Microsoft SQL Server.

Aby uzyskać najlepsze wyniki, dostosuj nazwy tabel i schematów, aby dopasować je do własnego środowiska.

Upewnij się, że czat zawiera @mssql prefiks. Na przykład wpisz @mssql swoje pytanie lub polecenie. Dzięki temu uczestnik czatu rozumie, że prosi o pomoc związaną z językiem SQL.

Wykrywanie i naprawianie zagrożeń bezpieczeństwa za pomocą narzędzia GitHub Copilot

GitHub Copilot pomaga deweloperom wykrywać i naprawiać typowe luki w zabezpieczeniach na wczesnym etapie procesu programowania, zanim dotrą do środowiska produkcyjnego. Niezależnie od tego, czy używasz nieprzetworzonych metod SQL, ORM, czy procedur składowanych, narzędzie GitHub Copilot może identyfikować niebezpieczne wzorce, wyjaśniać potencjalne zagrożenia i sugerować bezpieczniejsze alternatywy na podstawie kontekstu bazy danych. Jest to szczególnie przydatne dla deweloperów, którzy nie specjalizują się w zabezpieczeniach, ale muszą przestrzegać bezpiecznych praktyk kodowania.

Poniżej przedstawiono typowe przypadki użycia i przykłady tego, co można zadać za pośrednictwem uczestnika czatu.

Wykrywanie iniekcji SQL

Wstrzyknięcie kodu SQL jest jedną z najczęstszych i niebezpiecznych luk w zabezpieczeniach w aplikacjach bazy danych. GitHub Copilot może pomóc w zidentyfikowaniu nieparametrizowanych zapytań, problemów interpolacji ciągów i nieprawidłowego użycia dynamicznego języka SQL, jednocześnie zalecając bezpieczniejsze, sparametryzowane alternatywy dostosowane do kontekstu.

  • Pracuję z SQLAlchemy w Python nad moim bieżącym schematem bazy danych SalesLT. Sprawdź następujące SQLAlchemy zapytanie pod kątem potencjalnych zagrożeń bezpieczeństwa, takich jak SQL wstrzyknięcie kodu, nadmierne pobieranie lub problemy z wydajnością. Jeśli ma to zastosowanie, zasugeruj ulepszenia przy użyciu sparametryzowanych zapytań, buforowania połączeń i innych bezpiecznych SQL Server rozwiązań w celu zapewnienia wydajności i bezpieczeństwa.
query = f"SELECT * FROM SalesLT.Customer WHERE LastName = '{user_input}'"
result = engine.execute(query).fetchall()
  • Przeanalizuj następujące JavaScriptSQL zapytanie pod kątem potencjalnych luk w zabezpieczeniach. Identyfikuj zagrożenia, takie jak SQL iniekcja, nadmierne pobieranie i złe praktyki uwierzytelniania. Wyjaśnij, dlaczego to zapytanie jest niezabezpieczone i zapewnia bezpieczną alternatywę.
const query = `SELECT * FROM Users WHERE Username = '${username}' AND Password = '${password}'`;
  • Korzystając z mojej bieżącej bazy danych, zasymuluj atak typu SQL na procedurę składowaną SalesLT.uspGetCustomerOrderHistory i zasugeruj poprawki.

  • Przejrzyj procedurę SalesLT.uspGetCustomerOrderHistory składowaną w bieżącej bazie danych pod kątem potencjalnych luk w zabezpieczeniach polegających na wstrzyknięciu kodu SQL. Wyjaśnij, jak niesparametrizowane lub nieprawidłowo zweryfikowane dane wejściowe mogą być wykorzystywane i zaleca się stosowanie bezpiecznych praktyk kodowania.

  • Przejrzyj składowaną procedurę SalesLT.uspGetCustomerOrderHistory_Insecure. Zidentyfikuj wszelkie potencjalne problemy z zabezpieczeniami w implementacji, a następnie podaj poprawioną wersję procedury składowanej, która rozwiązuje te problemy bez jawnego wyświetlania listy najlepszych rozwiązań w zakresie zabezpieczeń.

Aby utworzyć procedurę składowaną, możesz użyć następującego języka T-SQL:

CREATE OR ALTER PROCEDURE [SalesLT].[uspGetCustomerOrderHistory_Insecure]
@CustomerID NVARCHAR (50)
AS
BEGIN
    DECLARE @SQL AS NVARCHAR (MAX) = N'SELECT *
    FROM SalesLT.SalesOrderHeader
    WHERE CustomerID = ' + @CustomerID + ';';
    EXECUTE (@SQL);
END
GO

Ogólne sugestie dotyczące zabezpieczeń

Poza wstrzyknięciem kodu SQL wiele aplikacji baz danych domyślnie uwidacznia poufne dane lub używa niezabezpieczonych konfiguracji. GitHub Copilot zawiera wskazówki dotyczące szyfrowania połączeń, maskowania lub ochrony danych osobowych oraz dopasowywania ich do najlepszych rozwiązań dotyczących bezpiecznego uwierzytelniania i autoryzacji w wielu stosach programistycznych.

  • Zaleca się stosowanie bezpiecznych metod przechowywania poufnych danych w SalesLT.Address tabeli.

  • Jakie są najlepsze strategie lub wbudowane funkcje w mojej bazie danych na potrzeby maskowania danych osobowych w SalesLT.Customer tabeli?

  • Jak mogę skonfigurować ciąg połączenia w Entity Framework Core, aby wymusić szyfrowanie i uniknąć uwidaczniania poświadczeń?

  • W środowisku Prisma lub Node.js, w jaki sposób bezpiecznie używać uwierzytelniania Microsoft Entra ID lub zarządzanej tożsamości SQL Server zamiast przechowywania haseł?

  • Jakie SQL Server opcje należy włączyć lub zweryfikować (na przykład Always Encrypted, Transparent Data Encryption), aby chronić dane klientów podczas korzystania z orm, takich jak Sequelize lub EF Core?

Opinia: Analizator zabezpieczeń

Aby pomóc nam udoskonalić i ulepszyć narzędzie GitHub Copilot dla rozszerzenia MSSQL, użyj następującego szablonu problemu GitHub, aby przesłać swoją opinię: GitHub Copilot Feedback

Podczas przesyłania opinii należy wziąć pod uwagę następujące kwestie:

  • Przetestowane scenariusze — daj nam znać obszary, na przykład tworzenie schematu, generowanie zapytań, zabezpieczenia, lokalizację.

  • Co się udało — opisz wszelkie doświadczenia, które przebiegły sprawnie, były pomocne lub przerosły twoje oczekiwania.

  • Problemy lub błędy — obejmują wszelkie problemy, niespójności lub mylące zachowania. Zrzuty ekranu lub nagrania ekranu są szczególnie przydatne.

  • Sugestie dotyczące poprawy — podziel się pomysłami na poprawę użyteczności, rozszerzaniem zasięgu lub ulepszaniem odpowiedzi w usłudze GitHub Copilot.