Über Copilot Autofix für code scanning
GitHub Copilot Autofix ist eine Erweiterung von code scanning, die Benutzenden gezielte Empfehlungen zur Behebung von code scanning-Warnungen liefert, damit sie keine neuen Sicherheitslücken verursachen. Die potenziellen Korrekturen werden automatisch von großen Sprachmodellen (Large Language Models, LLMs) anhand von Daten aus der Codebasis und aus der Analyse von code scanning generiert. GitHub Copilot Autofix ist für die Analyse von CodeQL 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 Standort einer Warnung in Codeänderungen, die die Warnung beheben können. Copilot Autofix nutzt die Schnittstellen interner GitHub Copilot-APIs mit dem großen Sprachmodell GPT-5.1 von OpenAI, das über ausreichende generative Funktionen verfügt, um vorgeschlagene Korrekturen im Code und erläuternden Text dazu zu generieren.
Copilot Autofix ist standardmäßig zulässig und für jedes Repository mit CodeQL aktiviert, aber du kannst Copilot Autofix auch deaktivieren. Informationen zum Deaktivieren von Copilot Autofix auf Unternehmens-, Organisations- und Repository-Ebene finden Sie unter Deaktivieren von Copilot Autofix für Sicherheitswarnungen beim Codescan.
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 Requests 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 senkt die Einstiegshürde für Entwickelnde, indem es Informationen zu Best Practices mit Details zur Codebasis kombiniert und der Entwicklerin bzw. dem Entwickler mögliche Korrekturen vorschlägt. 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 CodeQL code scanning
Copilot Autofix unterstützt die Generierung von Korrekturen für eine Teilmenge von Abfragen, die in den standardmäßigen und sicherheitserweiterten CodeQL Abfragesuiten für C#, C/C++, Go, Java/Kotlin, Swift, JavaScript/TypeScript, Python, Ruby und Rust enthalten sind. Weitere Informationen zu diesen Abfragesammlungen finden Sie unter CodeQL-Abfragesammlungen.
Generierung von Vorschlägen
Wenn Copilot Autofix für ein Repository aktiviert ist, senden die identifizierten code scanning-Warnmeldungen Eingaben an das LLM. Wenn das LLM eine mögliche Korrektur generieren kann, wird diese als Vorschlag angezeigt.
GitHub sendet verschiedene Daten aus der code scanning-Analyse an das LLM. 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 Abfragehilfe zu CodeQL.
Copilot Autofix-Vorschläge werden generiert und im code scanning-Back-End gespeichert. Sie werden als Vorschläge angezeigt. Es ist keine Benutzerinteraktion erforderlich, außer der Aktivierung von code scanning in der Codebasis und der Erstellung einer Pull-Anforderung.
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 im Zusammenhang mit Advanced Security. Darüber hinaus werden die von Copilot Autofix verarbeiteten Daten streng genommen nicht für LLM-Trainingszwecke verwendet. Weitere Informationen zu den Geschäftsbedingungen von Advanced Security finden Sie unter GitHub-Nutzungsbedingungen für zusätzliche Produkte und Funktionen in der Dokumentation zu Free, Pro, & Team.
Einschränkungen und Nichtdeterminismus von Copilot Autofix
Copilot Autofix für code scanning-Warnungen kann nicht in jeder Situation einen Fix für jede Warnung generieren. Das Feature funktioniert auf Best-Effort-Basis und ist nicht garantiert, 100% der Zeit erfolgreich zu sein.
Wenn möglicherweise kein Copilot Autofix-Vorschlag 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, werden nicht alle möglichen Warnungstypen oder Sprachen abgedeckt.
Qualität der Vorschläge
GitHub verwendet eine automatisierte Testumgebung, 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 Wirksamkeit von Vorschlägen, indem wir alle vorgeschlagenen Änderungen unbearbeitet zusammenführen, bevor wir code scanning und die Komponententests des Repositorys auf den resultierenden Code anwenden.
- Wurde die code scanning-Warnung durch den Vorschlag behoben?
- Hat der Fix neue code scanning Warnungen eingeführt?
- Hat die Korrektur Syntaxfehler verursacht, die code scanning erkennen kann?
- 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 gehen davon aus, dass Vorschläge für andere Projekte, die von Copilot Autofix unterstützte Sprachen verwenden, einem ähnlichen Muster folgen sollten.
- Copilot Autofix fügt wahrscheinlich den meisten Warnmeldungen einen Codevorschlag hinzu.
- 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 liefert wertvolle Informationen, die Ihnen bei der Behebung von code scanning-Warnungen helfen. Letztendlich liegt es jedoch in Ihrer Verantwortung, die vorgeschlagene Änderung zu bewerten 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 von Copilot Autofix prüfen, müssen Sie stets die Grenzen der KI berücksichtigen und die Änderungen gegebenenfalls bearbeiten, bevor Sie sie akzeptieren. Sie sollten auch in Betracht ziehen, die CI-Tests und das Abhängigkeitsmanagement 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, die Einschränkungen der Vorschläge von Copilot Autofix zu umgehen, besteht darin, Best Practices 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)