次の方法で共有


クイック スタート: セキュリティ アナライザー

GitHub Copilot は、開発者が SQL コードとアプリケーション層クエリで一般的なセキュリティ リスクを特定して対処するのに役立ちます。 SQL インジェクション、露出超過データ、安全でないパターンなどの脆弱性を検出するのに役立ちます。特に、強力なセキュリティの背景を持たない開発者には、開発中にコンテキストに対応した実用的な推奨事項を提供します。

概要

データベースに接続されていて、MSSQL 拡張機能でアクティブなエディター ウィンドウが開かれていることを確認します。 この接続により、 @mssql チャット参加者はデータベース環境のコンテキストを理解できるため、正確でコンテキストに対応した提案が可能になります。 データベース接続がないと、チャット参加者は意味のある応答を提供するスキーマまたはデータ コンテキストを持ちません。

次の例では、 AdventureWorksLT2022 サンプル データベースを使用します。このデータベースは、 Microsoft SQL Server サンプルとコミュニティ プロジェクト のホーム ページからダウンロードできます。

最適な結果を得るには、独自の環境に合わせてテーブル名とスキーマ名を調整します。

チャットに @mssql プレフィックスが含まれていることを確認します。 たとえば、「 @mssql 」と入力し、その後に質問またはプロンプトを入力します。 これにより、チャット参加者は、SQL 関連のサポートを求めていることを理解できます。

GitHub Copilot を使用してセキュリティ リスクを検出して修正する

GitHub Copilot は、開発者が運用環境に到達する前に、開発プロセスの早い段階で一般的なセキュリティ脆弱性を検出して修正するのに役立ちます。 生の SQL、ORM、ストアド プロシージャのいずれを使用している場合でも、GitHub Copilot は安全でないパターンを特定し、潜在的なリスクを説明し、データベース コンテキストに基づいてより安全な代替手段を提案できます。 これは、セキュリティを専門とせず、セキュリティで保護されたコーディングプラクティスに従う必要がある開発者にとって特に便利です。

チャット参加者から質問できる一般的なユース ケースと例を次に示します。

SQL インジェクションの検出

SQL インジェクションは、データベース アプリケーションで最も一般的で危険なセキュリティの脆弱性の 1 つです。 GitHub Copilot は、パラメーター化されていないクエリ、文字列補間の問題、動的 SQL の誤用を特定するのに役立つ一方で、コンテキストに合わせて調整されたより安全でパラメーター化された代替手段を推奨します。

Python での SQLAlchemy の例

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()

JavaScript SQL の例

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}'`;

SQL インジェクション攻撃のシミュレーション

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

ストアド プロシージャの例を確認する

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.

セキュリティ問題の例を特定

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

一般的なセキュリティに関する推奨事項

SQL インジェクション以外にも、多くのデータベース アプリケーションは機密データを公開するか、既定で安全でない構成を使用します。 GitHub Copilot では、接続の暗号化、個人データのマスクまたは保護、複数の開発スタックにわたるセキュリティで保護された認証と承認のベスト プラクティスとの連携に関するガイダンスが提供されます。

機密データ ストレージの例

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

個人データのマスクの例

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

Entity Framework Core での暗号化の適用の例

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

Node.js 認証の Microsoft Entra ID 例

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?

データをセキュリティで保護するための SQL Server オプションの推奨例

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?

感想をお聞かせください

MSSQL 拡張機能の GitHub Copilot を改良および改善するために、次の GitHub 問題テンプレートを使用してフィードバックを送信します。 GitHub Copilot フィードバック

フィードバックを送信する場合は、次の内容を検討してください。

  • テスト済みのシナリオ – スキーマの作成、クエリの生成、セキュリティ、ローカライズなど、どの領域に重点を置いたかをお知らせください。

  • うまくいったこと - スムーズで役に立ち、期待を超えた経験について説明します。

  • 問題またはバグ – 問題、不整合、または混乱を招く動作を含めます。 スクリーンショットや画面の記録は特に役立ちます。

  • 改善の提案 – 使いやすさの向上、カバレッジの拡大、GitHub Copilot の応答の強化に関するアイデアを共有します。