GitHub Copilot는 개발자가 SQL 코드 및 애플리케이션 계층 쿼리에서 일반적인 보안 위험을 식별하고 해결하는 데 도움을 줍니다. 특히 개발 중에 실용적이고 컨텍스트 인식 권장 사항을 제공하여 강력한 보안 배경이 없는 개발자를 위해 SQL 삽입, 과다 노출된 데이터 및 안전하지 않은 패턴과 같은 취약성을 감지하는 데 도움이 될 수 있습니다.
시작하기
데이터베이스에 연결되어 있고 MSSQL 확장으로 활성 편집기 창이 열려 있는지 확인합니다. 이 연결을 사용하면 채팅 참가자가 @mssql
데이터베이스 환경의 컨텍스트를 이해할 수 있으므로 정확하고 컨텍스트 인식 제안을 사용할 수 있습니다. 데이터베이스 연결이 없으면 채팅 참가자는 의미 있는 응답을 제공하는 스키마 또는 데이터 컨텍스트가 없습니다.
다음 예제에서는 AdventureWorksLT2022
홈페이지에서 다운로드할 수 있는 샘플 데이터베이스를 사용합니다.
최상의 결과를 위해 사용자 고유의 환경에 맞게 테이블 및 스키마 이름을 조정합니다.
@mssql
접두사가 채팅에 포함되어 있는지 확인하세요. 예를 들어, @mssql
을 입력한 후에 질문이나 프롬프트를 작성합니다. 이렇게 하면 채팅 참가자가 SQL 관련 지원을 요청하는 것을 이해할 수 있습니다.
GitHub Copilot를 사용하여 보안 위험 감지 및 수정
GitHub Copilot는 개발자가 프로덕션에 도달하기 전에 개발 프로세스 초기에 일반적인 보안 취약성을 감지하고 수정하는 데 도움이 됩니다. 원시 SQL, ORM 또는 저장 프로시저를 사용하든, GitHub Copilot는 안전하지 않은 패턴을 식별하고, 잠재적 위험을 설명하고, 데이터베이스 컨텍스트에 따라 더 안전한 대안을 제안할 수 있습니다. 이는 보안을 전문으로 하지 않지만 보안 코딩 방법을 따라야 하는 개발자에게 특히 유용합니다.
다음은 채팅 참가자를 통해 요청할 수 있는 일반적인 사용 사례 및 예제입니다.
SQL 인젝션 탐지
SQL 삽입은 데이터베이스 애플리케이션에서 가장 일반적이고 위험한 보안 취약성 중 하나입니다. GitHub Copilot는 매개 변수가 없는 쿼리, 문자열 보간 문제 및 동적 SQL의 오용을 식별하는 동시에 컨텍스트에 맞게 보다 안전하고 매개 변수가 있는 대안을 권장할 수 있습니다.
- 저는 현재 데이터베이스
SQLAlchemy
스키마를 위해Python
에서SalesLT
와 함께 일하고 있습니다. 다음SQLAlchemy
쿼리에 대해SQL
주입, 과잉 인출 또는 성능 문제와 같은 잠재적인 보안 위험을 확인하십시오. 해당하는 경우 성능 및 보안을 보장하기 위해 매개 변수가 있는 쿼리, 연결 풀링 및 기타 보안SQL Server
사례를 사용하여 개선 사항을 제안합니다.
query = f"SELECT * FROM SalesLT.Customer WHERE LastName = '{user_input}'"
result = engine.execute(query).fetchall()
- 잠재적인 보안 취약성에 대한 다음
JavaScript
SQL
쿼리를 분석합니다. 주입, 과잉 인출 및 잘못된 인증 관행과 같은SQL
위험을 식별합니다. 이 쿼리가 안전하지 않은 이유를 설명하고 안전한 대안을 제공합니다.
const query = `SELECT * FROM Users WHERE Username = '${username}' AND Password = '${password}'`;
현재 데이터베이스를 사용하여 저장 프로시저에
SQL
대한SalesLT.uspGetCustomerOrderHistory
삽입 공격을 시뮬레이션하고 수정 사항을 제안합니다.내 현재 데이터베이스의 저장 프로시저
SalesLT.uspGetCustomerOrderHistory
를 잠재적인 SQL 삽입 취약성에 대해 검토하십시오. 매개 변수가 없거나 잘못 유효성이 검사된 입력을 악용할 수 있는 방법을 설명하고 보안 코딩 사례를 권장합니다.저장 프로시저를
SalesLT.uspGetCustomerOrderHistory_Insecure
검토하십시오. 구현에서 잠재적인 보안 문제를 식별한 다음, 보안 모범 사례를 명시적으로 나열하지 않고 이러한 문제를 해결하는 수정된 버전의 저장 프로시저를 제공합니다.
다음 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
일반 보안 제안
SQL 삽입 외에도 많은 데이터베이스 애플리케이션은 중요한 데이터를 노출하거나 기본적으로 안전하지 않은 구성을 사용합니다. GitHub Copilot는 연결을 암호화하고, 개인 데이터를 마스킹하거나 보호하고, 여러 개발 스택에서 보안 인증 및 권한 부여 모범 사례에 부합하는 지침을 제공합니다.
중요한 데이터를 테이블에 저장하기 위한 보안 메서드를 권장합니다
SalesLT.Address
.테이블의 개인 데이터를
SalesLT.Customer
마스킹하기 위한 데이터베이스의 최상의 전략 또는 기본 제공 기능은 무엇인가요?암호화를 적용하고 자격 증명을 노출하지 않도록 연결 문자열
Entity Framework Core
을 구성하려면 어떻게 해야 하나요?Prisma
또는 Node.js 환경에서 암호를 저장하는 대신 Microsoft Entra ID 인증 또는 관리 ID를SQL Server
안전하게 사용하려면 어떻게 해야 하나요?Sequelize 또는 EF Core와 같은 ORM을 사용할 때 고객 데이터를 보호하기 위해 어떤
SQL Server
옵션을 사용하거나 확인해야Always Encrypted
Transparent Data Encryption
하나요?
피드백: 보안 분석기
MSSQL 확장에 대한 GitHub Copilot를 구체화하고 개선하는 데 도움이 되도록 다음 GitHub 문제 템플릿을 사용하여 피드백을 제출합니다. GitHub Copilot 피드백
피드백을 제출할 때 다음을 포함하는 것이 좋습니다.
테스트된 시나리오 – 스키마 만들기, 쿼리 생성, 보안, 지역화와 같이 집중한 영역을 알려주세요.
잘 작동하는 기능 – 원활하거나 도움이 되거나 예상을 초과한 모든 경험을 설명합니다.
문제 또는 버그 – 문제, 불일치 또는 혼란스러운 동작을 포함합니다. 스크린샷 또는 화면 녹화는 특히 유용합니다.
개선 제안 - 유용성 향상, 적용 범위 확장 또는 GitHub Copilot의 응답 향상을 위한 아이디어를 공유합니다.