Udostępnij przez


Szybki start: analizator zabezpieczeń

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.

Wprowadzenie

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.

SqlAlchemy w przykładzie języka Python

I'm working with SQLAlchemy in Python for my current database `SalesLT` schema. Check the following `SQLAlchemy` query for potential security risks, such as SQL injection, over-fetching, or performance issues. If applicable, suggest improvements using parameterized queries, connection pooling, and other secure `SQL Server` practices to ensure performance and security.

query = f"SELECT * FROM SalesLT.Customer WHERE LastName = '{user_input}'"
result = engine.execute(query).fetchall()

Przykład kodu SQL w języku JavaScript

Analyze the following JavaScript SQL query for potential security vulnerabilities. Identify risks such as SQL injection, over-fetching, and poor authentication practices. Explain why this query is insecure and provide a secure alternative.

const query = `SELECT * FROM Users WHERE Username = '${username}' AND Password = '${password}'`;

Symulacja ataku polegający na wstrzyknięciu kodu SQL

Using my current database, simulate a SQL injection attack for the `SalesLT.uspGetCustomerOrderHistory` stored procedure and suggest fixes.

Zapoznaj się z przykładem procedury składowanej

Review the stored procedure `SalesLT.uspGetCustomerOrderHistory` in my current database for potential SQL injection vulnerabilities. Explain how unparameterized or improperly validated inputs could be exploited and recommend secure coding practices.

Przykład identyfikowania problemów z zabezpieczeniami

Review the `SalesLT.uspGetCustomerOrderHistory_Insecure` stored procedure. Identify any potential security issues in the implementation and then provide a revised version of the stored procedure that addresses these concerns without explicitly listing security best practices.

You can use the following T-SQL to create the stored procedure:

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.

Przykład magazynu danych poufnych

Recommend secure methods for storing sensitive data in the `SalesLT.Address` table.

Przykład maskowania danych osobowych

What are the best strategies or built-in features in my database for masking personal data in the `SalesLT.Customer` table?

Przykład wymuszania szyfrowania w programie Entity Framework Core

How can I configure my connection string in Entity Framework Core to enforce encryption and avoid exposing credentials?

Przykład uwierzytelniania przy użyciu Microsoft Entra ID w Node.js

In a Prisma or Node.js environment, how can I securely use Microsoft Entra ID authentication or managed identity with SQL Server instead of storing passwords?

Zalecane opcje programu SQL Server na potrzeby zabezpieczania przykładu danych

What SQL Server options should I enable or verify (for example, Always Encrypted, Transparent Data Encryption) to protect customer data when using ORMs like Sequelize or EF Core?

Podziel się swoimi doświadczeniami

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.