Uploaded by Dimitri Derungs

03 1 Sicherheitsrisiken vermeiden Spring Aufgaben

advertisement
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
Download