Gefälschte Sicherheitsdaten mit Python und faker-security generieren
Michael Aquilina
26. April 2022
0 Min. LesezeitSnyk hat kürzlich unser Python-Paket faker-security als Open Source veröffentlicht, um allen zu helfen, die mit Sicherheitsdaten arbeiten. In diesem Blogbeitrag erklären wir kurz, worum es bei diesem Python-Paket geht und wie Sie es verwenden. Doch zunächst sehen wir uns an, wie sich das Python-Paket factory_boy in Kombination mit faker-security einsetzen lässt, um das Schreiben von Tests während der Entwicklung zu verbessern.
Hinweis: Grundkenntnisse in Python sind hilfreich, um diesen Beitrag optimal nutzen zu können.
Testen mit Faker und factory_boy
Bevor wir uns faker-security näher ansehen, empfiehlt es sich, zunächst zu klären, was factory_boy und Faker sind und wie wir sie bei Snyk einsetzen.
Snyk ist fest davon überzeugt, dass automatisierte Tests unseren Code wartbar machen. Tests ermöglichen es uns, schnell zu iterieren und Funktionen zu entwickeln sowie Änderungen an unserem Code sicher vorzunehmen, ohne befürchten zu müssen, dabei versehentlich bestehende Funktionen zu beeinträchtigen.
Unser Engagement für Tests spornt uns an, neue Wege zu finden, um das Testerlebnis für diejenigen zu vereinfachen, die Tests in unseren Teams schreiben und lesen. Faker und factory_boy sind zwei unserer bevorzugten Pakete zum Testen von Python-Projekten. Zusammen erzeugen sie Testinstanzen der Modelle, die wir verwenden.
Faker ist ein Python-Paket, mit dem Sie für viele verschiedene Arten von Feldern wie Benutzernamen, Datumsangaben und URLs fiktive Daten generieren können. factory_boy ist ein weiteres Python-Paket, das die Integration der Datengenerierung von Faker in Ihren Code erleichtert, indem es Factory-Klassen definiert.
Besonders an factory_boy gefällt uns, dass Testautorinnen und -autoren damit die Daten festlegen können, auf die es in ihren Tests ankommt, während Faker alle übrigen Daten generiert, die für den Test keine Rolle spielen. Das verbessert die Lesbarkeit von Tests erheblich: Der erforderliche Code wird kürzer und unnötige Felder, um die Sie sich nicht kümmern müssen, entfallen.
Um den Unterschied in der Praxis zu sehen, vergleichen Sie in den folgenden Beispielen einen mit factory_boy geschriebenen Test mit einem Test ohne dieses Framework.
Ohne Factories:
Mit Factories:
Der Test, der UserFactory importiert, ist exakt gleichwertig mit dem Test ohne diesen Import. Er ist jedoch kürzer, leichter zu lesen und macht deutlich, welche Felder für den Test relevant sind. Im Vergleich dazu ist der Test ohne Factory länger, und es ist schwieriger zu erkennen, auf welche Felder es für den Test tatsächlich ankommt. Dieses Beispiel ist recht einfach, doch mit zunehmender Komplexität der Tests wird der Unterschied noch deutlicher.
Die Klasse UserFactory kann einmalig in tests/factories.py definiert und in all Ihren Tests wiederverwendet werden:
Bei Sicherheitsdaten müssen wir häufig Daten für Sicherheitsfelder wie CVSSv3-Vektoren und CVE-Kennungen generieren. Faker bietet diese Daten standardmäßig nicht direkt an. Sie können jedoch eigene Provider hinzufügen – und genau hier kommt faker-security ins Spiel.
Was ist faker-security?
faker-security ist ein Python-Paket, das als Provider für Faker fungiert und es Ihnen ermöglicht, zufällige sicherheitsbezogene Daten für Ihre Projekte zu generieren. Derzeit unterstützt faker-security die Datengenerierung für:
CVSSv3-Vektoren
CVSSv2-Vektoren
semver-Versionen
NPM-semver-Versionsbereiche
CVEs
CWEs
Künftig möchten wir weitere Generierungsmethoden und Arten von Versionsbereichen unterstützen – zum Beispiel semver für Maven.
Aufbauend auf unseren vorherigen Beispielen würden wir eine VulnerabilityFactory erstellen, um fiktive Daten zu generieren, und sie wie folgt definieren:
So verwenden Sie faker-security
faker-security lässt sich über pip installieren:
Wenn Sie das Paket in Ihrem Projekt verwenden möchten, fügen Sie es der Abhängigkeitsdatei Ihrer Wahl hinzu. In der Regel ist dies die Datei requirements.txt Ihres Projekts. Wenn Sie einen Paketmanager auf höherer Ebene wie poetry oder pipenv verwenden, folgen Sie dessen Anweisungen zum Hinzufügen neuer Pakete.
Nach der Installation müssen Sie nur noch Faker oder factory_boy so konfigurieren, dass faker-security verwendet wird.
Wenn Sie Tests mit pytest ausführen, empfehlen wir, faker-security für factory_boy wie folgt in Ihrer Datei conftest.py einzurichten:
So geht es mit faker-security weiter
Mit factory_boy und Faker lassen sich Tests vereinfachen. Und mit faker-security steht Ihnen jetzt eine schnelle und einfache Möglichkeit zur Verfügung, um fiktive Sicherheitsdaten für all Ihre Projekte zu generieren!
Wir hoffen, dass Sie dieses Paket ebenso nützlich finden wie wir, und freuen uns über Ihre Beiträge! Geben Sie unserem GitHub-Repository einen Stern und senden Sie Pull Requests und Beiträge. Viel Spaß beim Testen!
