Informationen Copilot Autofix zu code scanning
GitHub Copilot Autofix ist eine Erweiterung von code scanning, die Benutzern gezielte Empfehlungen zur Behebung von code scanning-Warnungen bietet, damit sie neue Sicherheitsrisiken vermeiden können. Die potenziellen Fixes werden automatisch von großen Sprachmodellen (LLMs) mithilfe von Daten aus der Codebasis und aus der code scanning Analyse generiert.
GitHub Copilot Autofix ist für die CodeQL Analyse verfügbar.
Hinweis
Du benötigst kein Abonnement für GitHub Copilot, um GitHub Copilot Autofix zu verwenden. Copilot Autofix ist in allen öffentlichen Repositorys auf GitHub.com sowie in internen und privaten Repositorys im Besitz von Organisationen und Unternehmen verfügbar, die über eine Lizenz für GitHub Code Security verfügen.
Copilot Autofix generiert potenzielle Korrekturen, die für den vorhandenen Quellcode relevant sind, und übersetzt die Beschreibung und den Speicherort einer Warnung in Codeänderungen, die die Warnung beheben können.
Copilot Autofix verwendet interne GitHub Copilot APIs, die mit dem großen Sprachmodell GPT-5.1 von OpenAI interfacieren, das über ausreichende generative Funktionen verfügt, um sowohl vorgeschlagene Fixes im Code als auch erläuternden Text für diese Korrekturen zu erzeugen.
Copilot Autofix ist standardmäßig erlaubt und für jedes Repository mit CodeQL aktiviert, aber Sie können sich dagegen entscheiden und Copilot Autofix deaktivieren. Informationen zum Deaktivieren Copilot Autofix auf Unternehmens-, Organisations- und Repositoryebene finden Sie unter [AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/disabling-autofix-for-code-scanning).
Im Sicherheitsübersichts-Dashboard einer Organisation können Sie die Gesamtzahl der Codevorschläge anzeigen, die für geöffnete und geschlossene Pull Requests in der Organisation in einem bestimmten Zeitraum generiert wurden. Weitere Informationen finden Sie unter Einblicke in die Sicherheit anzeigen.
Entwicklerumgebung
Code scanning Benutzer können bereits Sicherheitswarnungen sehen, um ihre Pull-Anforderungen zu analysieren. Entwickelnde wurden jedoch häufig wenig im Schreiben von sicherem Code geschult, wodurch das Beheben dieser Warnungen erheblichen Aufwand erfordert. Sie müssen zuerst den Standort der Warnung und die Beschreibung lesen und verstehen und dann dieses Verständnis verwenden, um den Quellcode zu bearbeiten, um das Sicherheitsrisiko zu beheben.
Copilot Autofix verringert die Eintrittsbarriere für Entwickler, indem Informationen zu bewährten Methoden mit Details der Codebasis kombiniert werden und eine Warnung den Entwicklern auf eine mögliche Lösung hinweist. Anstatt mit einer Suche nach Informationen über das Sicherheitsrisiko zu beginnen, beginnt der Entwickler mit einem Codevorschlag, der eine mögliche Lösung für ihre Codebasis veranschaulicht. Der Entwickler wertet den potenziellen Fix aus, um festzustellen, ob es die beste Lösung für ihre Codebasis ist, und um sicherzustellen, dass das beabsichtigte Verhalten beibehalten wird.
Nachdem ein Commit für einen vorgeschlagenen Fix oder eine Änderung vorgenommen wurde, sollte der Entwickler immer überprüfen, ob Continuous Integration-Tests (CI) für die Codebasis weiterhin bestehen und dass die Warnung vor dem Zusammenführen ihrer Pull Request als aufgelöst angezeigt wird.
Unterstützte Sprachen für CodeQLcode scanning
Copilot Autofix unterstützt die Fixgenerierung für eine Teilmenge von Abfragen, die in den Standard- und sicherheitserweiterten CodeQL Abfragesammlungen enthalten sindC#, C/C++, Go, Java/Kotlin, Swift, JavaScript/TypeScript, Python, Ruby und Rust. Weitere Informationen zu diesen Abfragesammlungen finden Sie unter [AUTOTITLE](/code-security/code-scanning/managing-your-code-scanning-configuration/codeql-query-suites#built-in-codeql-query-suites).
Generierung von Vorschlägen
Wenn Copilot Autofix für ein Repository aktiviert ist, senden identifizierte Warnungen Eingaben an die code scanning LLM. Wenn das LLM eine mögliche Korrektur generieren kann, wird diese als Vorschlag angezeigt.
GitHub sendet dem LLM eine Vielzahl von Daten aus der code scanning Analyse. Beispiel:
* CodeQL Warnungsdaten im SARIF-Format. Weitere Informationen finden Sie unter SARIF-Unterstützung für die Codeüberprüfung.
- Code aus der aktuellen Version der Verzweigung.
- Kurze Code-Ausschnitte um jeden Quellstandort, Empfänger-Standort und jeden Standort, auf den in der Warnmeldung verwiesen wird oder im Flusspfad enthalten ist.
- Erste ~10 Zeilen aus jeder Datei, die an einem dieser Standorte beteiligt ist.
- Hilfetext für die CodeQL Abfrage, die das Problem identifiziert hat. Beispiele finden Sie in der CodeQL Abfragehilfe.
Alle Copilot Autofix Vorschläge werden im code scanning Back-End generiert und gespeichert. Sie werden als Vorschläge angezeigt. Es ist keine Benutzerinteraktion erforderlich, die über die Aktivierung code scanning der Codebasis und das Erstellen einer Pullanforderung hinaus hinausgeht.
Bei der Generierung von Korrekturen werden keine Kundendaten gesammelt oder verwendet, die über den oben beschriebenen Umfang hinausgehen. Daher unterliegt die Verwendung dieses Features den bestehenden Geschäftsbedingungen, die mit Advanced Securitydiesem Feature verbunden sind. Darüber hinaus werden Daten, die von Copilot Autofix verarbeitet werden, nicht für LLM-Schulungszwecke verwendet. Weitere Informationen zu Advanced Security geschäftsbedingungen finden Sie unter GitHub-Nutzungsbedingungen für zusätzliche Produkte und Funktionen.
Einschränkungen und Nicht-Determinismus von Copilot Autofix
Copilot Autofix für code scanning Warnungen kann in jeder Situation kein Fix für jede Warnung generiert werden. Das Feature funktioniert auf Best-Effort-Basis und ist nicht garantiert, 100% der Zeit erfolgreich zu sein.
Wenn ein Copilot Autofix Vorschlag möglicherweise nicht generiert wird
Mehrere Faktoren können verhindern, dass Copilot Autofix erfolgreich eine vorgeschlagene Lösung generiert.
-
_Nicht-Determinismus:_ Das zugrunde liegende große Sprachmodell ist ein generatives Modell und daher nicht deterministisch. Dies bedeutet, dass selbst bei derselben Warnung und dem gleichen Code möglicherweise kein lebensfähiger Vorschlag entsteht, oder der Vorschlag kann sich bei den verschiedenen Versuchen unterscheiden. -
_Problemkomplexität und Kontext:_ Einige Sicherheitswarnungen, z. B. solche, die einen Ablaufverfolgungsdatenfluss über eine komplexe, mehrdateiige Codebasis oder solche erfordern, die subtile Logikfehler darstellen, können für das Modell schwierig gelöst werden. -
_Dateigröße:_ Wenn sich der betroffene Code in einer sehr großen Datei oder einem sehr großen Repository befindet, kann der für die LLM bereitgestellte Kontext abgeschnitten werden. Das Modell benötigt ausreichend Kontext, um die umgebende Codelogik zu verstehen und einen Fix sicher anzuwenden; Wenn dieser Kontext eingeschränkt ist, versucht das Feature keinen Fix. -
_Sprach- und Frameworkabdeckung:_ Obwohl Copilot Autofix eine wachsende Liste von Sprachen und CodeQL-Warnungen unterstützt wird, wird nicht jeder mögliche Warnungstyp oder jede mögliche Sprache behandelt.
Qualität der Vorschläge
GitHub verwendet ein automatisiertes Testframework, um die Qualität der Vorschläge von Copilot Autofix kontinuierlich zu überwachen. Dadurch können wir nachvollziehen, wie sich die vom LLM generierten Vorschläge im Laufe der Modellentwicklung verändern.
Die Testumgebung umfasst eine Reihe von über 2.300 Warnungen aus einer Vielzahl öffentlicher Repositorys, in denen der hervorgehobene Code Testabdeckung hat. Vorschläge für diese Warnmeldungen werden getestet, um ihre Qualität zu überprüfen, d. h. um festzustellen, inwieweit Entwickelnde sie bearbeiten müssten, bevor sie in den Code übernommen werden können. Bei vielen der Testwarnungen konnten die vom LLM generierten Vorschläge unverändert übernommen werden, um die Warnung zu beheben, während alle bestehenden CI-Tests weiterhin erfolgreich bestanden wurden.
Darüber hinaus wird das System einem Belastungstest unterzogen, um auf potenzielle Schäden (häufig als rotes Team bezeichnet) zu prüfen, und ein Filtersystem auf dem LLM hilft, potenziell schädliche Vorschläge für Benutzer anzuzeigen.
So testet GitHub Vorschläge
Wir testen die Effektivität von Vorschlägen, indem wir alle vorgeschlagenen Änderungen ungeändert zusammenführen, bevor code scanning und die Unittests des Repositorys für den resultierenden Code ausgeführt werden.
- Wurde die code scanning Warnung durch den Vorschlag behoben?
- Hat der Fix neue code scanning Warnungen eingeführt?
- Hat der Fix Syntaxfehler eingeführt, die von code scanning erkannt werden können?
- Hat der Fix die Ausgabe einen der Repository-Tests geändert?
Darüber hinaus überprüfen wir viele der erfolgreichen Vorschläge und stellen sicher, dass sie die Warnung beheben, ohne neue Probleme einzuführen. Wenn eine oder mehrere dieser Überprüfungen fehlgeschlagen sind, hat unsere manuelle Überprüfung gezeigt, dass die vorgeschlagene Korrektur in vielen Fällen nahezu korrekt war, aber einige kleinere Änderungen benötigten, die ein Benutzer identifizieren und manuell ausführen konnte.
Effektivität bei anderen Projekten
Der Testsatz enthält eine breite Spanne verschiedener Arten von Projekten und Warnungen. Wir prognostizieren, dass Vorschläge für andere Projekte, die von Copilot Autofix sprachen unterstützt werden, einem ähnlichen Muster folgen sollten.
-
Copilot Autofix wird wahrscheinlich einen Codevorschlag zu den meisten Benachrichtigungen hinzufügen. - Wenn Entwickelnde die Vorschläge bewerten, gehen wir davon aus, dass die meisten Korrekturen ohne Änderungen oder mit geringfügigen Aktualisierungen vorgenommen werden können, um den größeren Kontext des Codes widerzuspiegeln.
- Ein kleiner Prozentsatz der vorgeschlagenen Fixes spiegelt ein erhebliches Missverständnis der Codebasis oder des Sicherheitsrisikos wider.
Jedes Projekt und jede Codebasis ist jedoch eindeutig, sodass Entwickler möglicherweise einen größeren Prozentsatz der vorgeschlagenen Fixes bearbeiten müssen, bevor sie diese festlegen. Copilot Autofix bietet wertvolle Informationen, die Ihnen helfen, Warnungen zu beheben code scanning , aber letztendlich bleibt es Ihre Verantwortung, die vorgeschlagene Änderung auszuwerten und die Sicherheit und Genauigkeit Ihres Codes sicherzustellen.
Hinweis
Die Generierung von Korrekturen für unterstützte Sprachen hängt von der LLM-Betriebskapazität ab. Darüber hinaus wird jeder vorgeschlagene Fix getestet, bevor er einem Pull Request hinzugefügt wird. Wenn kein Vorschlag verfügbar ist oder wenn die vorgeschlagene Korrektur interne Tests nicht besteht, wird kein Vorschlag angezeigt.
Einschränkungen bei Vorschlägen
Wenn Sie einen Vorschlag Copilot Autofixüberprüfen, müssen Sie immer die Einschränkungen von KI berücksichtigen und die Änderungen nach Bedarf bearbeiten, bevor Sie die Änderungen akzeptieren. Sie sollten auch in Erwägung ziehen, die CI-Tests und die Abhängigkeitsverwaltung für ein Repository zu aktualisieren, bevor Sie Copilot Autofix für code scanning aktivieren. Weitere Informationen finden Sie unter Verringern der Einschränkungen von Vorschlägen.
Einschränkungen bei Codevorschlägen
-
_Menschliche Sprachen:_ Das System verwendet in erster Linie englische Daten, einschließlich der Eingabeaufforderungen, die an das System gesendet werden, den Code, der von den LLMs in ihren Datasets gesehen wurde, und die Testfälle, die für die interne Auswertung verwendet werden. Vorschläge, die von LLM generiert werden, weisen möglicherweise eine niedrigere Erfolgsquote für Quellcode und Kommentare auf, die in anderen Sprachen geschrieben wurden und andere Zeichensätze verwenden. -
_Syntaxfehler:_ Das System schlägt möglicherweise Korrekturen vor, die keine syntaktisch korrekten Codeänderungen sind, daher ist es wichtig, Syntaxprüfungen für Pull Requests auszuführen. -
_Standortfehler:_ Das System schlägt möglicherweise Korrekturen vor, die syntaktisch korrekter Code sind, aber an der falschen Position vorgeschlagen werden. Dies bedeutet, dass Benutzende, wenn sie eine Korrektur akzeptieren, ohne den Standort zu bearbeiten, einen Syntaxfehler verursachen. -
_Semantische Fehler_: Das System kann Fixes vorschlagen, die syntaktisch gültig sind, aber die Semantik des Programms ändern. Das System hat kein Verständnis für die Absicht des Programmierers oder der Codebasis, wie sich der Code verhalten soll. Wenn Sie eine gute Testabdeckung haben, können Entwickler überprüfen, ob ein Fix das Verhalten der Codebasis nicht ändert. -
_Sicherheitsrisiken und irreführende Fixes:_ Das System kann Korrekturen vorschlagen, die das zugrunde liegende Sicherheitsrisiko nicht beheben und/oder neue Sicherheitsrisiken einführen. -
_Teilausführung der Fixes:_ Das System kann Fixes vorschlagen, die nur teilweise das Sicherheitsrisiko beheben oder nur teilweise die beabsichtigte Codefunktionalität beibehalten. Das System sieht nur eine kleine Teilmenge des Codes in der Codebasis und erzeugt nicht immer global optimale oder korrekte Lösungen.
Einschränkungen bei Abhängigkeitsvorschlägen
Manchmal enthält ein vorgeschlagener Fix eine Änderung der Abhängigkeiten der Codebasis. Wenn Sie ein Abhängigkeitsverwaltungssystem verwenden, werden alle Änderungen automatisch hervorgehoben, damit der Entwickler dies überprüfen kann. Stellen Sie vor dem Zusammenführen eines Pull Request immer sicher, dass Abhängigkeitsänderungen sicher sind und das beabsichtigte Verhalten der Codebasis beibehalten.
-
_Neue oder aktualisierte Abhängigkeiten:_ Das System kann das Hinzufügen oder Aktualisieren von Softwareabhängigkeiten als Teil eines vorgeschlagenen Fixes vorschlagen. Wenn Sie beispielsweise vorschlagen, die `package.json` Datei für JavaScript-Projekte zu ändern, um Abhängigkeiten von npm hinzuzufügen. -
_Nicht unterstützte oder unsichere Abhängigkeiten:_ Das System weiß nicht, welche Versionen einer vorhandenen Abhängigkeit unterstützt oder sicher sind. -
_Erzeugte Abhängigkeiten:_ Das System verfügt über unvollständige Kenntnisse der im breiteren Ökosystem veröffentlichten Abhängigkeiten. Dies kann zu Vorschlägen führen, die eine neue Abhängigkeit von Malware hinzufügen, die Angreifer unter einem statistisch wahrscheinlichen Abhängigkeitsnamen veröffentlicht haben.
Verringern der Einschränkungen bei Vorschlägen
Die beste Möglichkeit zur Entschärfung der Einschränkungen von Vorschlägen Copilot Autofix besteht darin, bewährte Methoden zu befolgen. Beispielsweise sind die Verwendung von CI-Tests von Pull Requests zur Überprüfung der funktionalen Anforderungen nicht betroffen und verwenden Abhängigkeitsverwaltungslösungen, z. B. die Abhängigkeitsüberprüfungs-API und -Aktion. Weitere Informationen finden Sie unter Informationen zur Abhängigkeitsüberprüfung.
Es ist wichtig zu beachten, dass der Autor eines Pull Requests die Verantwortung dafür behält, wie er auf die Kommentare der Reviewer und die vorgeschlagenen Code-Änderungen reagiert, unabhängig davon, ob sie von Kollegen oder automatischen Tools vorgeschlagen wurden. Entwickler sollten immer Vorschläge für Codeänderungen kritisch betrachten. Bei Bedarf sollten sie die vorgeschlagenen Änderungen bearbeiten, um sicherzustellen, dass der Ergebniscode und die Anwendung korrekt, sicher sind, Leistungskriterien erfüllen und alle anderen funktionalen und nicht funktionalen Anforderungen für die Anwendung erfüllen.
Nächste Schritte
-
[AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/about-code-scanning-alerts) -
[AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/triaging-code-scanning-alerts-in-pull-requests#working-with-autofix-suggestions-for-alerts-on-a-pull-request) -
[AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/resolving-code-scanning-alerts#generating-suggested-fixes-for-code-scanning-alerts) -
[AUTOTITLE](/code-security/code-scanning/managing-code-scanning-alerts/disabling-autofix-for-code-scanning)