Skip to main content

Sicher programmieren mit Snyk Code: Die Ignore-Funktion mit dem gewissen Etwas

Artikel von

Frank Fischer

Blog Design Snyk Code

30. März 2021

0 Min. Lesezeit

Beim Scannen Ihres Codes mit unserem Tool für sicheres Programmieren kann Snyk Code alle möglichen Sicherheitslücken finden. Snyk Code ist zwar schnell, präzise und umfangreich, doch manchmal müssen bestimmte Warnungen unterdrückt werden. Typische Anwendungsfälle finden sich in Testcode, wenn Sie ausdrücklich fest codierte Passwörter verwenden, um Ihre Routinen zu testen, oder wenn Sie ein Problem kennen, sich aber entscheiden, es nicht zu beheben. Für solche Situationen bietet Snyk Code – wie auch die anderen Produkte der Snyk-Plattform – die Möglichkeit, Vorschläge zu ignorieren.

Es gibt mehr zu ignorieren, als Sie vielleicht denken (zumindest mehr, als ich dachte). Sehen wir uns an, wie Sie ein Problem ignorieren, und werfen wir anschließend einen Blick hinter die Kulissen, um zu erfahren, wie wir diese Funktion umgesetzt haben.

So verwenden Sie die Ignore-Funktion in Snyk Code

In der Weboberfläche von Snyk Code finden Sie eine neue Schaltfläche mit der Bezeichnung Ignorieren (unten rechts mit einem durchgestrichenen Auge als Symbol):

Snyk Code zeigt einen SQL-Injection-Befund mit anfälligem JavaScript-Code, einer Erklärung zu nicht bereinigten HTTP-Eingaben sowie den Schaltflächen „Ignorieren“ und „Vollständige Details“.

Damit können Sie die Engine für statische Anwendungssicherheitstests (SAST) konfigurieren. Wir sehen uns gleich an, wie das funktioniert. Konzentrieren wir uns zunächst auf die Verwendung.

Snyk-Code-Dialog zum Markieren eines Problems als nicht anfällig, mit Kommentarfeld, Optionen zur Dauer des Ignorierens und Schaltfläche „Speichern“

Wenn Sie auf Ignorieren klicken, wird ein Overlay angezeigt (siehe oben). Wählen Sie zuerst aus, ob das Problem als keine Sicherheitslücke, vorübergehend ignorieren (wenn Sie die Meldung vorerst nur unterdrücken möchten) oder dauerhaft ignorieren (wird nicht behoben) markiert werden soll. Anschließend können Sie einen Kommentar für sich selbst oder Ihre Kolleginnen und Kollegen hinzufügen. Wir empfehlen Ihnen dringend, eine kurze Erklärung zu schreiben – ohne Kommentar erscheinen Entscheidungen von letzter Woche manchmal rätselhaft. Zum Schluss können Sie festlegen, wie lange das Problem ignoriert werden soll (14, 30, 60 oder 90 Tage oder für immer).

Wenn Sie ein Problem ignorieren, wird es standardmäßig nicht angezeigt. Links finden Sie eine Statusauswahl für ignorierte Probleme. Dort können Sie diese einblenden und die Ignore-Markierung entfernen oder bearbeiten. Weitere Informationen zu dieser Funktion finden Sie in unserer Dokumentation zum Ignorieren von Problemen in Snyk Code.

Vorschläge zu ignorieren ist komplizierter, als es scheint

Damit ein Problem als zu ignorieren gekennzeichnet (oder nicht in den Problembericht aufgenommen) werden kann, muss es eindeutig identifiziert werden. Bei jedem erneuten Scan muss die Engine dasselbe Problem finden und wieder entsprechend markieren. Der Algorithmus kann sich natürlich nicht einfach Dateiname und Zeilennummer merken, denn der Code ändert sich ständig – und damit auch die Zeilennummer. Die herkömmliche Lösung von Lintern besteht darin, neben dem Problem einen Kommentar einzufügen, der das System anweist, es zu ignorieren. So sah auch unsere ursprüngliche Implementierung aus. Einige Entwicklerinnen und Entwickler meldeten uns jedoch zurück, dass sie ihren Code nicht mit Kommentaren durchsetzen wollten, nur um die statische Codeanalyse zu konfigurieren. Deshalb haben wir uns eine einzigartige und unserer Meinung nach bessere Lösung ausgedacht.

Herkömmliche Systeme verwenden den Quellcode an der Stelle, an der das Problem auftritt (sowie einige Zeilen davor und danach), berechnen daraus einen Hash und nutzen diesen als Kennung für das Problem. Wird der Text geändert, ändert sich auch die Problem-ID, wodurch alle diesem Problem zugewiesenen Markierungen gelöscht werden. Wir Menschen sehen das jedoch etwas anders: Wenn ich neben dem Problem einen Kommentar hinzufüge, habe ich das Problem selbst in Wirklichkeit nicht verändert. Der Hash ändert sich trotzdem, und das Problem wird als neues Problem erkannt.

Um dem entgegenzuwirken, vergleichen die meisten anderen Tools nur einige wenige Zeilen des Berichts. Dadurch werden entweder ähnliche Berichte ignoriert, wenn ein anderes Problem mit ähnlicher Signatur erneut auftritt (zu aggressives Ignorieren), oder die Übereinstimmung geht verloren, sobald sich nicht zusammenhängender Code ändert (was zu einer Flut von Meldungen führt). Für einen akzeptablen Mechanismus verwenden manche Tools sogar zusammengestellte Listen mit Dutzenden von Ausnahmen dafür, wie Berichte abgeglichen werden. Beide Ansätze sind fehlerhaft. Sie arbeiten grundsätzlich auf Textebene und berücksichtigen nicht, welcher Analyzer das eigentliche Ergebnis geliefert hat. Das ist, als würden sie die Wörter eines Satzes als Zeichenfolge behandeln, ohne deren Bedeutung zu verstehen.

So setzt Snyk Code die Ignore-Funktion um

Bei der statischen Codeanalyse wird der Eingabecode unter anderem in eine sogenannte Zwischenrepräsentation umgewandelt. Diese Datenstruktur bildet den Daten- oder Kontrollfluss des Codes ab, abstrahiert jedoch von einigen Details. Unsere Idee: Diese Repräsentation zur Generierung des Hashs verwenden. So erkennt die Implementierung dasselbe Problem auch dann, wenn Sie Ihren Code umstrukturieren oder eine Variable umbenennen. Außerdem haben wir die Anforderungen an eine exakte Übereinstimmung gelockert. Daher führen die meisten kleineren Codeänderungen an einer Stelle mit einem ignorierten Problem nicht dazu, dass der Bericht ohne Grund erneut angezeigt wird.

Durch den semantischen Abgleich können wir dasselbe Problem wie zuvor erkennen – so wie es auch eine Entwicklerin oder ein Entwickler tun würde. Außerdem brauchen Sie keine Kommentare mehr in Ihrem Quellcode. Die folgenden beiden Codeausschnitte verweisen trotz textlicher Unterschiede auf dasselbe Problem, da wir lediglich die Variablen umbenannt haben:

var fs = require('fs');

var logFileName = req.query.file || 'standard_log.log';
var logfile = fs.readFile(logFileName, "utf8", function(err, data) {...

var filesystem = require('fs');

var generalLogFileName = req.query.file || 'standard_log.log'; 
var handleLogFile = filesystem.readFile(generalLogFileName, "utf8", function(err, data) {...

Wir ignorieren Ihr Feedback nicht

Wir hoffen, dass Ihnen diese neue Interpretation der Ignore-Funktion besser gefällt. Sie ist nur ein Beispiel dafür, wie wertvolles Feedback unserer Nutzerinnen und Nutzer in konkrete Verbesserungen eingeflossen ist. Teilen Sie uns mit, wie Ihnen die neue Ignore-Funktion gefällt und wie wir das Produkt künftig verbessern können. Wir freuen uns über Ihr Feedback.

Sichern Sie Ihren Code mit modernsten Erkenntnissen

Lernen Sie in nur 30 Minuten das gesamte Funktionsspektrum von Snyk Code SAST kennen.

Gepostet in:

Weiterlesen

blog feature snyk container custom base recommendations
Blog

Evo Agentic AppSec: Sicherheit, die mit der KI-Entwicklung Schritt hält

KI-gestützte Entwicklung überholt herkömmliche Security-Workflows. Snyk Agentic AppSec setzt Security-Agenten ein, die Schwachstellen kontinuierlich finden, beheben und überprüfen – während Menschen die Maßstäbe festlegen.

feature insights context
Blog

Autonome Angriffe sind bereits Realität. Die Verteidigung muss Schritt halten.

Autonome Angreifer verkürzen das Zeitfenster für die Verteidigung. Erfahren Sie, wie kontinuierliches Erkennen, Beheben, Validieren und Verhindern Sicherheitsteams helfen kann, Schritt zu halten.

illustration hero ai
Blog

Der KI-Hurrikan ist da

KI beschleunigt gleichermaßen die Softwareentwicklung und Cyberangriffe. Führungskräfte müssen Agents und Code von Anfang an absichern, zur Laufzeit Kontrollen durchsetzen und Abwehrmaßnahmen unabhängig validieren.