2009-04-14 2 views
3

Похоже GAE выбрал подмножество JDK 1.6 классов, в соответствии с:Логика (если таковые имеются) за Google App Engine за исключением стандартных JDK 1.6 API,

Google App Engine JDK white list

, который очень неудачно, как один получает класс связывают ошибки со всеми наиболее распространенными java-библиотеками, которые занимаются связыванием данных, их отражением, загрузкой классов и аннотациями. Хотя некоторые упущения могут быть для устаревших или устаревших вещей, есть и другие, которые этого не делают. Моя особая проблема связана с потоковыми анализаторами (javax.xml.stream. *), Которые были добавлены в JDK 1.6 после долгой задержки (API был завершен примерно в то же время, что и JDK 1.4). Опущение этого затрудняет выполнение масштабируемой высокопроизводительной обработки xml.

Проблема, как я понимаю, заключается в том, что классы не только отсутствуют, но и не могут быть добавлены из-за ограничений безопасности.

Итак: это открытый философский вопрос, который, вероятно, только разработчики GAE могли бы точно ответить, но ... почему некоторые API отбрасываются со стандартного JDK 1.6, казалось бы, произвольно?

UPDATE:

Краткое примечание: спасибо за ответы. Для чего это стоит, я действительно не вижу, как безопасность будет иметь какое-либо отношение к тому, чтобы не включать javax.xml.stream. Аспекты безопасности важны для многих других вещей (и, например, мне не нужны потоки, и я могу понять, почему они отсутствуют), так что это понятный шаблонный ответ; просто не применимо для этого.

Stax API - это всего лишь набор интерфейсов и аннотация для крика вслух. Но что более важно, он имеет точно такие же характеристики, как и интерфейсы SAX, DOM и JAXP, которые уже включены!

Но, похоже, этот вопрос был доведен до сведения Google дэвов:

discussion on whitelisting Stax API

так вот надеясь, что этот и подобные вопросы могут быть решены быстро.

ответ

2

Крайне сомнительно, что эти вещи были сброшены произвольно. GAE работает в чрезвычайно чувствительной к безопасности среде, и есть хорошие шансы, что внутренний аудит библиотек классов обнаружил некоторые риски, которые Google не хотел брать.

+0

Я несколько сомневаюсь, что это были критерии. Безопасность, скорее всего, была использована для определения того, как менеджер безопасности обрабатывает запросы к ресурсам (файлы, сети и т. Д.), Но относится к включениям классов ... – StaxMan

+0

@StaxMan - Имейте в виду, что GAE позволяет много «рискованных» вещей. Доступны многие функции отражения, которые обычно должны быть отключены в такой среде. Это делает его также функцией того, какие атаки можно использовать с частными полями, методами и т. Д. – jsight

+0

Да, согласен, и я думаю, что это здорово. Но это еще более странно, что менее рискованные вещи не были включены. Я надеюсь, что это действительно «клерикальная ошибка» и ничего не ошибка. – StaxMan

7

GAE запускается в размещенной среде с ненадежными (и потенциально вредоносными) клиентами, которым часто предоставляется доступ бесплатно.

В этом типе среды безопасность является очень серьезной проблемой, и API-интерфейсы, имеющие доступ к файловой системе, получают очень серьезный контроль. Я думаю, именно поэтому они решили начать довольно консервативно с точки зрения того, что они позволяют.

Это не удивило бы меня, если бы все классы попали в белый список, так как вопросы безопасности решались (и основывались на спросе).

Но я бы даже не ожидал получить инструменты для нарезания резьбы, например.

+0

Точно верно. Белый список существует по соображениям безопасности. Возможно, были исключены некоторые классы, которые должны быть включены; надеюсь, они будут рассмотрены и добавлены после того, как будет определено, что они безопасны и не могут быть использованы для выхода из песочницы. –

0

Что касается высокопроизводительных потоковых анализаторов XML, вы можете попытаться найти соответствующую библиотеку (файл jar). Если он не использует потоки или доступ к файлам (или API с черным списком), он должен работать так же хорошо, как и в JDK.

Существует много (довольно сложный) libraries that work on GAE.

+1

Да, за исключением того, что, если API lib реализует (например, javax.xml.stream), эффективно занесен в черный список (находится под «javax», а не в белом списке), я понимаю, что он не может быть загружен - вы можете включить банку API, но которые не будут загружаться с нарушением безопасности. Это, однако, стоит проверить. – StaxMan

+0

Правда. Вам нужно будет использовать собственный API этой конкретной библиотеки (а не javax.xml.stream). – Thilo

+0

Я был бы в порядке с собственным API, но сам сам должен ДОЛЖЕН иметь классы API javax.xml.stream - он их реализует. Так что это большая проблема. В отличие от JAXP, который является очень тонкой оболочкой на DOM, SAX, Stax является «настоящим» API. – StaxMan

Смежные вопросы