Jenkins, CSRF und das Crumb
Jenkins bietet seine Dienste neben der Weboberfläche ebenfalls via Rest-Api an. Wer bei Verwendung dieser die Sicherheit erhöhen möchte, kann in den Einstellungen von Jenkins u.a. die CSRF Protection aktivieren um, Cross Site Request Forgery Angriffe zu verhindern. Jenkins akzeptiert nach Aktivierung des Features Rest-Service Aufrufe dann nur, wenn dem Request ein Token im Header beigefügt wird (in der Jenkins Dokumentation wird dies ‘crumb’ genannt). Als quick & dirty Lösung kann man mittels wget, wie in der Dokumentation beschrieben, ein Token generieren. Dieses kann man dann z.B. über Properties in die Anwendung einfließen lassen. Das ist eine schnelle Lösung für erste Tests, hat aber neben sicherheitstechnischen Bedenken den Nachteil, dass das Token an die Session gebunden ist: wird die Anwendung, die die Rest-Aufrufe durchführt in der Testumgebung beispielsweise auf verschiedene Applicationservern parallel getestet und dabei das gleiche Token verwendet, so erhält der zweite Aufrufer einen Status 403 zurück: invalid crumb.
Viel besser ist es vor jedem Rest-Aufruf ein gültiges Token von Jenkins anzufordern - Jenkins bietet hierfür einen eigenen Rest-Service, der wahlweise im json oder xml Format ein Token zurückliefert. Es bietet sich an hierfür eine eigene Funktion zu schreiben, die bei Bedarf den Tokennamen sowie das Token selbst zurückliefert:
1 | /** |