2009-04-14 4 views
3

Es ist wie GAE sieht eine Teilmenge von JDK 1.6 Klassen gewählt hat, gemäß:Logic (falls vorhanden) hinter Google App Engine ohne Standard-JDK 1.6 APIs

Google App Engine JDK white list

was sehr schade ist, als eine Klasse bekommt Verbindungsfehler überall mit den meisten üblichen Java-Bibliotheken, die sich mit Datenbindung, Reflektion, Klassenladen und Anmerkungen befassen. Obwohl einige Auslassungen für veraltete oder veraltete Dinge gelten können, gibt es andere, die es nicht gibt. Mein besonderes Anliegen ist das Streaming von Pull-Parsern (javax.xml.stream. *), Das erst nach einer langen Verzögerung zu JDK 1.6 hinzugefügt wurde (die API wurde etwa zur gleichen Zeit wie JDK 1.4 fertiggestellt). Wenn Sie dies auslassen, wird es schwieriger, eine skalierbare Hochleistungs-XML-Verarbeitung durchzuführen.

Problem wie ich verstehe ist, dass nicht nur Klassen fehlen, aber sie können nicht einmal aus Sicherheitsgründen hinzugefügt werden.

Also: das ist eine offene philosophische Frage, die wahrscheinlich nur GAE-Entwickler sicher beantworten konnten, aber ... warum werden einige APIs scheinbar willkürlich aus dem Standard-JDK 1.6 entfernt?

UPDATE:

Schnell Anmerkung: Dank für Antworten. Für das, was es wert ist, sehe ich wirklich nicht, wie Sicherheit mit javax.xml.stream nicht zu tun haben würde. Sicherheitsaspekte sind für viele andere Dinge relevant (und ich brauche zum Beispiel keine Threads und kann sehen, warum sie nicht da sind), daher ist es verständlich, dass es eine Antwort gibt; einfach nicht anwendbar für diesen.

Stax API ist nur eine Reihe von Schnittstellen und abstrakt für das Schreien laut. Aber was noch wichtiger ist, es hat genau die gleichen Auswirkungen wie die Schnittstellen SAX, DOM und JAXP - die bereits enthalten sind!

Aber es sieht aus wie dieses Problem, um die Aufmerksamkeit von Google Devs gebracht wurde:

discussion on whitelisting Stax API

so hier hofft, dass diese und ähnliche Probleme schnell gelöst werden können.

Antwort

2

Es ist äußerst zweifelhaft, dass diese Dinge willkürlich fallen gelassen wurden. GAE läuft in einer äußerst sicherheitsrelevanten Umgebung, und die Chancen stehen gut, dass eine interne Prüfung der Klassenbibliotheken einige Risiken festgestellt hat, die Google nicht eingehen wollte.

+0

Ich bezweifle, dass dies auch das Kriterium war. Sicherheit wurde am wahrscheinlichsten verwendet, um zu bestimmen, wie Sicherheitsmanager Anfragen an Ressourcen (Dateien, Netzwerk usw.) handhabt, aber Klasseneinschlüsse ... – StaxMan

+0

@StaxMan - Denken Sie daran, dass GAE viele "riskante" Dinge erlaubt. Viele Reflexionsmerkmale, die normalerweise in einer solchen Umgebung deaktiviert werden müssten, sind verfügbar. Das macht es auch abhängig davon, welche Art von Angriffen man mit privaten Feldern, Methoden usw. ausführen könnte. – jsight

+0

Ja, einverstanden, und ich denke, das ist großartig. Aber es macht es noch seltsamer, dass weniger riskante Dinge nicht enthalten sind. Ich hoffe, es ist wirklich eine Art "Schreibfehler" und nichts Fehler. – StaxMan

7

GAE wird in einer gehosteten Umgebung mit nicht vertrauenswürdigen (und potentiell böswilligen) Clients ausgeführt, denen häufig kostenloser Zugriff gewährt wird.

In dieser Art von Umgebung ist die Sicherheit ein sehr hohes Problem, und APIs, die Dateisystemzugriff haben, werden sehr stark untersucht. Ich denke, das ist der Grund, warum sie sich dafür entschieden haben, ziemlich konservativ damit zu beginnen, was sie erlauben.

Es würde mich überhaupt nicht überraschen, wenn mehr Klassen ihren Weg in die Whitelist finden, da Sicherheitsprobleme angesprochen werden (und auf Nachfrage basieren).

Aber ich würde nicht einmal erwarten, Threading-Tools, z.

+0

Genau richtig. Die Whitelist ist aus Sicherheitsgründen da. Es ist möglich, dass einige Klassen ausgeschlossen wurden, die enthalten sein sollten; hoffentlich werden sie überprüft und hinzugefügt, sobald festgestellt wird, dass sie sicher sind und nicht dazu verwendet werden können, aus der Sandbox auszubrechen. –

0

Wie bei Ihren leistungsstarken Streaming-XML-Parsern könnten Sie versuchen, eine geeignete Bibliothek (JAR-Datei) zu finden. Sofern es nicht auf Threads oder Dateizugriff (oder Blacklist-API) beruht, sollte es genauso gut funktionieren wie das im JDK.

Es gibt viele (ziemlich komplexe) libraries that work on GAE.

+1

Ja, außer, wenn die API lib implementiert (wie javax.xml.stream) ist effektiv auf der schwarzen Liste (ist unter 'javax' und nicht auf der weißen Liste), verstehe ich, dass es nicht geladen werden kann - Sie können API jar, aber das wird nicht mit Sicherheitsverletzung geladen werden. Es lohnt sich aber, es auszuprobieren. – StaxMan

+0

Wahr. Sie müssten die native API dieser bestimmten Bibliothek (und nicht javax.xml.stream) verwenden. – Thilo

+0

Ich wäre in Ordnung mit nativen API, aber die impl selbst muss API javax.xml.stream Klassen zur Verfügung stehen - es implementiert sie. Das ist also das größere Problem. Im Gegensatz zu JAXP, einem sehr dünnen Wrapper für DOM, SAX, ist Stax eine "echte" API. – StaxMan