Softwareentwicklung Modul 183 – Sicherheitsrisiken vermeiden Aufgaben Sicherheitsrisiken vermeiden Aufgaben Beschreibung Diese Aufgaben gehören zum entsprechenden Dokument mit den Erklärungen zu den Risiken und die Abwehr von XSS. Inhaltsverzeichnis 1 AUFGABEN .................................................................................................................................................................... 2 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 AUFGABE 1 – INBETRIEBNAHME ............................................................................................................................................ 2 AUFGABE 2 – VERSUCH MIT CSS ............................................................................................................................................ 2 AUFGABE 3 – VERSUCH MIT JAVASCRIPT ............................................................................................................................. 3 AUFGABE 4 – BEITRAG ÜBER REST EINFÜGEN ................................................................................................................... 3 AUFGABE 5 – ANTISAMY LIBRARY EINBINDEN.................................................................................................................... 4 AUFGABE 6 – LOGGING VON FEHLERN .................................................................................................................................. 5 AUFGABE 7 – JUNIT TEST, SECURITY .................................................................................................................................... 5 AUFGABE 8 – EINTRAG INS SECURITY BOOK ....................................................................................................................... 5 03_1_Sicherheitsrisiken vermeiden.docx / 22.02.2021 Rinaldo Lanza 1 Softwareentwicklung Modul 183 – Sicherheitsrisiken vermeiden Aufgaben 1 1.1 Aufgaben Aufgabe 1 – Inbetriebnahme Laden Sie das Projekt herunter und starten Sie es. Beim vorliegenden Projekt handelt es sich um eine Spring Boot Anwendung mit Thymeleaf sowie einem einfachen REST-Service. a) Öffnen Sie die Anwendung im Browser und fügen Sie über das Formular einen ersten Beitrag hinzu. Titel: "First Entry" Message: "Hello with bold in the text!", wobei das Wort Bold fett zu machen ist. Die Darstellung wird in etwas so aussehen, wobei der Eintrag zweimal ausgegeben wird: b) Schauen Sie sich die Tags in der HTML-Datei an, welche für die Ausgabe der Blog-Einträge verantwortlich sind und notieren Sie sich die Unterschiede bei den Tags. 1.2 Aufgabe 2 – Versuch mit CSS a) Fügen Sie einen weiteren Eintrag über das Formular hinzu und markieren Sie mit einem CSS-Style-Attribut das ein Wort rot. Öffnen Sie hierfür den Code Bereich vom TinyMCE Editor. Titel: Message: "Second Entry" "This is a red message.", wobei das Wort red rot zu markieren ist. 03_1_Sicherheitsrisiken vermeiden.docx / 22.02.2021 Rinaldo Lanza 2 Softwareentwicklung Modul 183 – Sicherheitsrisiken vermeiden Aufgaben 1.3 Aufgabe 3 – Versuch mit JavaScript Nun wird es ernst. Im folgenden Versuch soll ein einfaches JavaScript Script eingebaut werden, um eine CrossSite-Scripting Attacke zu simulieren. a) Schreiben Sie einen weiteren Beitrag mit dem folgenden Titel und Nachricht. Titel: "Third Entry" Message: "This is a message with <script>alert('try to insert script)</script>a script inside." → Sie werden feststellen, dass der Editor JavaScript nicht zulässt und somit eine gewisse Sicherheit bietet. 1.4 Aufgabe 4 – Beitrag über REST einfügen Die vorliegende Anwendung erlaubt auch das Einfügen von Einträgen über die REST-Schnittstelle. a) Schauen Sie sich den REST-Service einmal genauer an, starten Sie die Postman-Anwendung und fügen Sie den folgenden Aufruf hinzu. Diese Anfrage kann ein Blog-Eintrag über die REST-Schnittstelle erstellen. Dabei entsteht aber eine Sicherheitslücke die es zu schliessen gibt. Das folgende Bild zeigt die Ausgabe des über die Rest-Schnittstelle erstellten Eintrages. Darüber hinaus wird ein Pop-Up angezeigt. 03_1_Sicherheitsrisiken vermeiden.docx / 22.02.2021 Rinaldo Lanza 3 Softwareentwicklung Modul 183 – Sicherheitsrisiken vermeiden Aufgaben 1.5 Aufgabe 5 – Antisamy Library einbinden Wie in den letzten Aufgaben gesehen, gibt es ein Dilemma zwischen HTML-Tags erlauben und das Öffnen einer Sicherheitslücke. Die Library Antisamy hilft uns eine White-List der erlaubten Tags einzuführen sowie JavaScript zu entfernen. In dieser Aufgabe wollen wir die Library einsetzen. a) Binden Sie die Library mit ihren Abhängigkeiten über die pom.xml Datei ins Projekt ein. b) Fügen Sie den folgenden Code in die entsprechende Methode im Service hinzu und passen Sie diesen an. Filtern Sie den Titel sowie die Nachricht und speichern Sie den bereinigten Text wieder im einzufügenden BlogPost bevor Sie diesen zur Liste hinzufügen. Policy policy = Policy.getInstance( BlogDBSimulator.class.getResourceAsStream("/antisamy-tinymce.xml")); AntiSamy antiSamy = new AntiSamy(); CleanResults cr = antiSamy.scan(blogPost.getTitle(), policy); System.out.println(cr.getCleanHTML()); https://www.programmersought.com/article/3955135713/ c) Wo sind eigentlich die Policy-Dateien gespeichert? Finden Sie sie diese. d) Überfliegen Sie die Dokumentation zu den Eigenschaften der verschiedenen Policy-Dateien. e) Testen Sie das Programm mit verschiedenen Policy-Dateien und mit unterschiedlichen Tags wie antisamy.xml, -ebay.xml und -tinymce.xml. Kontrollieren Sie das Resultag der getCleanHTML Methode. 03_1_Sicherheitsrisiken vermeiden.docx / 22.02.2021 Rinaldo Lanza 4 Softwareentwicklung Modul 183 – Sicherheitsrisiken vermeiden Aufgaben 1.6 Aufgabe 6 – Logging von Fehlern Aus den CleanResults lassen sich die Meldungen aus dem Scan-Vorgang herauslesen. Im Programm sollten allfällige Fehler im Log gespeichert und selbstverständlich auch überwacht werden. a) Setzen Sie die Methoden ein und untersuchen Sie die vorangegangen Beispiele, indem Sie schauen welche ob und welche Fehlermeldungen ausgegeben werden. Number of errors: cr.getNumberOfErrors(); cr.getErrorMessages().forEach(System.out::println); b) Loggen Sie in geeigneter Art und Weise die Fehler in Ihrer Anwendung. 1.7 Aufgabe 7 – JUnit Test, Security Damit die Funktionsfähigkeit des Filters nachhaltig gesichert werden kann, müssen zwingend JUnit-Test programmiert werden. a) Implementieren Sie die folgenden Testfälle und hinterfragen Sie diese. Test 1 – addSimpleTest - Testdaten: String title = "my Title"; String message = "my message"; Test 2 – addTestWithTags - Testdaten: String title = "my Title"; String message = "my <strong>bold</strong> message"; Test 3 – addTestWithtCSSStyle - Testdaten: String title = "my Title"; String message = "my <span style='color:red'>red</span> message"; Test 4 – addTestWithScript - Testdaten: String title = "my Title"; String message = "my message with a hack<script>alert('hello there')</script>"; → ergänzen Sie die vier Testfälle mit dem Titel Feld. 1.8 Aufgabe 8 – Eintrag ins Security Book In dieser Aufgabe müssen Sie die in dieser Übungen gemachten Erfahrungen festhalten und Reflektieren. Ergänzen Sie Ihr persönliches Security-Book mit diesem Kapitel. Thema: Parsen von Benutzereingaben über Formulare oder REST-Services. 1. Überlegen Sie sich, worauf es bei beim Parsen von Eingabefeldern ankommt und welche nützlichen Informationen von der Antisamy Library genutzt werden können. 2. Beim Herausfiltern von Benutzereingaben muss man oft Kompromisse eingehen. Die Usability kann stark leiden, je grösser die Sicherheitsansprüche werden. 03_1_Sicherheitsrisiken vermeiden.docx / 22.02.2021 Rinaldo Lanza 5