KNF 2007 Skripting in Java

Werbung
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
Sicherheit bei Skriptsprachen in
Java Anwendungen
Kongress 2007
Dipl.-Wirtsch.-Inf. (FH)
Michael Behrendt
<[email protected]>
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
Inhalt
Inhalt
•
•
•
•
Use Case
Demo Anwendung
JSR223: Scripting for Java Plattform
Mögliche Nebenwirkungen
25.11.2007
Michael Behrendt <[email protected]>
2
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
Use Case
Use Case
• Konfiguration der Anwendung durch Endnutzer
• Beispiel: Rabatt-Staffel/Provisionsberechnung
• Szenario
• Möglicher Lösungsansatz
–
–
–
–
Regelwerk, XML, first match
<rule volume=“15“ discount=“0“/>
<rule volume=„50“ discount=„2“/>
<rule volume=„500“ discount=„5“/>
25.11.2007
Michael Behrendt <[email protected]>
3
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
Use Case
Change Request
Ursache: Neue Berechnung nicht mehr darstellbar
Neues Szenario
•
•
Lösungsansatz: weiteres Regelwerk fraglich
Lösungsansatz: Konfiguration per Skript
Use Case
•
•
•
– Genau abgegrenzte Teilaufgabe für Skript
– Skript ist Programmiersprache
– Alle Touring-berechenbaren Probleme lassen sich lösen
25.11.2007
Michael Behrendt <[email protected]>
4
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
Demo Anwendung
Demo Anwendung
Regionalleiter
inkl. Mitarbeiter
Konfiguration
Arbeit
Administrator
Web
Anwendung
Außendienst
25.11.2007
Michael Behrendt <[email protected]>
Datenbank
5
JSR223: Scripting for Java Plattform
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
JSR223:
Scripting for Java Plattform
• Bestandteil von Java 6
• Interfaces zur Einbindung von Skript-Interpretern
• Beliebige Skriptsprachen (u.a. AWK, Groovy,
Jaskell, JavaScript, Python, Ruby, Xpath, XSLT)
• JavaScript (rhino-Engine) als Referenz
• Ermöglicht Zugriff von/auf:
– JavaScript -> Java Objekte
– Java -> JavaScript Objekte
25.11.2007
Michael Behrendt <[email protected]>
6
JSR223: Scripting for Java Plattform
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
JSR223:
Ablaufschema
Java
JavaScript
Bindings
Business
Object
order
order.getTotalPrice()
engine.eval(bind, s)
var p =
order.totalPrice;
result = p * 0.02;
25.11.2007
Michael Behrendt <[email protected]>
7
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
JSR223: Scripting for Java Plattform
Beispiel Skripte
• var i = order.totalPrice;
result = i * 0.02;
• var totalNum = 0;
for(var iter = order.orderPositions.iterator();
iter.hasNext();) {
var pos = iter.next();
totalNum += parseInt(pos.parts);
}
if(totalNum>=50)
result = order.totalPrice * 0.05;
else if(totalNum >= 5)
result = order.totalPrice * 0.01;
else
result = 0;
25.11.2007
Michael Behrendt <[email protected]>
8
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
Nebenwirkungen
Nebenwirkung:
Schreibzugriff
• Business Objekte besitzen auch
Schreibmethoden
• Diese sind durch UI vor Zugriff geschützt
• Dies gilt nicht für Skripte
• order.orderPositions.get(0).parts *= 2;
var i = order.totalPrice;
result = i * 0.02;
• Workaround: Facade-Pattern
25.11.2007
Michael Behrendt <[email protected]>
9
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
Nebenwirkungen
Nebenwirkung:
private / protected Methoden
• „unsaubere“ Business Objekte können Logik
enthalten (z.B. save())
• Diese sind z.B. durch private Deklarationen
geschützt
• Dies gilt nicht für Reflection
• order.orderPositions.get(0).parts *= 2;
order.getClass().getDeclaredMethod("save",
null).invoke(order, null);
var i = order.totalPrice;
result = i * 0.02;
25.11.2007
Michael Behrendt <[email protected]>
10
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
Nebenwirkungen
Nebenwirkung:
Konstruktur Aufruf
• Reflektion ermöglicht Konstruktur Aufruf
• var posList = order.orderPositions;
• var pos =
posList.get(0).getClass().newInstance();
• pos.description = "Block";
• pos.parts = 50;
• pos.pricePerPart = 3.10;
• posList.add(pos);
• var i = order.totalPrice;
• result = i * 0.02;
25.11.2007
Michael Behrendt <[email protected]>
11
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
Nebenwirkung:
Dateizugriff
Nebenwirkungen
• Reflektion ermöglicht Laden und Instanzzieren
beliebiger Klassen
• var clazz =
order.getClass().getClassLoader().loadClass("java.i
• o.File");
• var constructor =
clazz.getConstructor(order.description.getClass());
• var file = constructor.newInstance("/etc/passwd");
• order.description =
file.toURI().toURL().getContent();
• var i = order.totalPrice;
• result = i * 0.02;
25.11.2007
Michael Behrendt <[email protected]>
12
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
Zusammenfassung
• Skripte stellen einen Kompromiss
zwischen Funktionsumfang und
Realisierungsaufwand dar
• JSR223 bietet die benötigte Infrastruktur
• Auswirkungen auf die Sicherheitsaspekte
der Java-Anwendungen sind noch nicht
vollständig erforscht
• Unüberlegter Einsatz kann zu
unerwünschten Nebenwirkungen führen
25.11.2007
Michael Behrendt <[email protected]>
13
Sicherheit bei Skriptsprachen in Java Anwendungen, KNF Kongress 2007
Literatur
Literatur
• JDK 6 javax.script.* Dokumentation
http://java.sun.com/javase/6/docs/api/jav
ax/script/package-summary.html
• JSR 223: Scripting for the JavaTM Platform
http://jcp.org/en/jsr/detail?id=223
• Scripting Project Homepage
https://scripting.dev.java.net
• Ein Loch im Sandkasten, iX Magazin, heise
Verlag, Ausgabe 11/2007, Seite 134ff
25.11.2007
Michael Behrendt <[email protected]>
14
Herunterladen