URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 114416
[ Назад ]

Исходное сообщение
"Oracle планирует убрать из Java встроенную поддержку сериали..."

Отправлено opennews , 27-Май-18 08:46 
Марк Реинхольд (Mark Reinhold (https://mreinhold.org/)), главный архитектор платформы Java, считает (https://www.infoworld.com/article/3275924/java/oracle-plans-...), что добавление в 1997 году в язык Java поддержки сериализации объектов было ужасной ошибкой, которую приходится расхлёбывать в виде всё вновь и вновь всплывающих критических уязвимостей (https://www.opennet.dev/opennews/art.shtml?num=47139) в различных продуктах на Java. По мнению Реинхольда от трети до половины всех уязвимостей в Java-проектах связаны с сериализацией, которая в силу простоты применения для решения многих задач провоцирует разработчиков на необдуманное использование.


Из соображений безопасности в долгосрочной перспективе Oracle планирует прекратить встроенную поддержку сериализации (кодирование объектов в последовательность байт для их сохранения или передачи), предложив в качестве замены компактный фреймворк. Во фреймворке будет обеспечена возможность безопасной сериализации Java-версии классов данных и графов записей, с возможностью манипуляции сериализированными данными в форматах JSON и XML. План будет реализован в рамках проекта Amber (http://openjdk.java.net/projects/amber/), сфокусированного на продвижении новых возможностей языка.

URL: https://www.infoworld.com/article/3275924/java/oracle-plans-...
Новость: https://www.opennet.dev/opennews/art.shtml?num=48666


Содержание

Сообщения в этом обсуждении
"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Вареник , 27-Май-18 08:46 
Решились, наконец.

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 09:03 
Нужны более радикальные меры:

"Oracle планирует убрать из Java встроенную поддержку Java"


"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Когда завезут поддержку GTA 5 , 27-Май-18 09:19 
У них, кстати, серьезные конкуренты. Вон, гному целый миллион подогнать хотят. Уж сколько они повыпиливают за эти деньги...
Хорошей дорогой идём, товарищи.

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено DerRoteBaron , 27-Май-18 13:49 
Надеюсь, первыми они выпилят экстеншены, так, чтобы ни люди ни Canonical не смогли использовать гном.

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено X4asd , 29-Май-18 18:41 
> "Oracle планирует убрать из Java встроенную поддержку Java"

я тоже сначала так и прочитал -- и ппц обрадовался же! :-)

а когда посмотрел повнимательнее увидил сирилизацию


"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено A.Stahl , 27-Май-18 09:44 
>Oracle планирует прекратить встроенную поддержку сериализации, предложив в качестве замены защищённый компактный фреймворк.

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


"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 10:00 
У встроенной стандартизированные формат и поведение

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено A.Stahl , 27-Май-18 10:20 
Это не проблема: вводится новый формат, старый объявляется deprecated и через несколько версий выбрасывается. Стандартная практика.

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 10:22 
Если чуточку внести изменения в этот план, то получится EEE - https://ru.wikipedia.org/wiki/Embrace,_Extend,_and_Extinguish

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 10:40 
Оракл расширит и поглатит свою же джаву?

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено IRASoldier , 27-Май-18 13:37 
Диванным конспирологам настоятельно рекомендуется - покурить матчасть (если асилят):

Тед Ньювард - "Пять вещей, которые вы не знали о... сериализации Java-объектов. Вы думали, что сериализованные данные в безопасности? Подумайте еще раз."
https://www.ibm.com/developerworks/ru/library/j-5things1/ind...

Еще в 2011 написано.


"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 10:28 
Необходимость поддержки обратной совместимости.

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено A.Stahl , 27-Май-18 10:38 
А выбрасывание функциональности и перенос её во внешние фреймворки да ещё и с изменением формата не нарушает обратную совместимость?

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 10:48 
Нарушает, но ты то предлогаешь изменить поведение стандартных классов и методов.
А как определять какой из них как работает? По System.getProperty("java.version") или как?
Обновили на компьютере ждаву, программа загружает уже сохраненные данные с диска, а там внезапно формат другой, и что будет?

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено d , 27-Май-18 11:05 
implements SerializableNew

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 11:10 
Мы разработаваем новый легковесный фреймворк для сериализации. Проект называется Amber, а маркерным интерфейсом для него будет SerializableNew

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 16:41 
class MyClass implements Serializable2 {
  static final long serialVersionUID2 = 1L;
}

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 15:18 
Сохранить безопасный функционал, а опасный явно пометить как таковой, отключить по умолчанию, и предоставлять только для старого байткода или при установке флага.

Можно подумать, что большинство фреймворков сериализации безопасны! Parcelable в Андроиде был создан чтобы повысить производительность сериализации, но в плане выполнения произвольного кода наступил на те же грабли. А загрузка левых классов по сети это вообще классическая проблема eval() — при чём здесь сериализация, если RMI, или что там ещё, написано через ж**у? Если создатели языка не в состоянии исправить свой функционал, пользователи будут использовать сторонние либы, которые в итоге наступят на те же грабли.


"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 11:05 
Скорее всего его не выкинут из jvm вообще. Для программ использующих старый api будет доступна сериализация, а новый нет.
Собственно вот и решение, пиши на Java 8-10 и не ной.

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено kk , 27-Май-18 10:50 
Так этож оракл, они сделают этот отдельный фреймворк платным и по подписке

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено KonstantinB , 27-Май-18 19:19 
Универсальная сериализация по определению не может быть защищенной.

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 28-Май-18 09:57 
Это еще почему?
Вы все Rest api на базе JSON уже взломали?

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 10:57 
Без удаления не щмогли исправить....

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 11:26 
Кто может гарантировать, что люди, написавшие ранее кривой код как часть жабы, теперь напишут ровный код уже как фреймворк?

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 12:57 
В новости речь о кривом коде как части приложений. Он кривой, потому что неправильно использует определённую функциональность жабы, которую планируют убрать, чтобы больше не провоцировать разработчиков кривых приложений.

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено obamma , 28-Май-18 00:35 
дух времени: хотим искоренить убийства - уничтожим все ножи!

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 28-Май-18 09:59 
> дух времени: хотим искоренить убийства - уничтожим все ножи!

На майских праздниках двоих по пьянке забили насмерть табуреткой.
Табуретки искореним тоже?


"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 13:44 
> которая в силу простоты применения для решения многих задач провоцирует разработчиков на необдуманное использование.

Т.е. новый фреймворк будет труден в использовании и разработчики вдруг начнут думать?


"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Crazy Alex , 27-Май-18 15:05 
Так вся жаба об ограничении возможностей, так и создавалась

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 15:31 
а чё сегодня 1-е апреля?

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 16:40 
> которая в силу простоты применения для решения многих задач провоцирует разработчиков на необдуманное использование.

иными словами, рукожопость _отдельных_ недопрограммистов компенсируют тем, что убирают важные фичи языка и инфраструктуры.

А как они собираются сериализовать графы с циклами в JSON и какая чудесная будет производительность - ещё предстоит посмеяться.


"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 27-Май-18 23:00 
Нет в этой фиче нифига важного. Вопрос в том, насколько они поломают обратную совместимость. А насчет графов Serializable тоже нифига предложить не может (т.е. зацикливание будет).

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено max , 28-Май-18 09:08 
С графами объектов стандартный механизм сериализации в java без проблем работает. Лишь бы хрень какую-нибудь написать.

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 28-Май-18 17:15 
Если граф с циклами, будет циклить. Граф != дерево.

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 28-Май-18 16:47 
JSON прекрасно поддерживает циклические связи (введением внутреннего ID). Мне другое интересно: как вообще посторонняя функциональность может быть "небезопасной для языка"? Хоть бы одну "уязвимость" написали! Тот же JSON - он существует. И работает. И ни одного репорта "это опасно!". В чём соль??

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 28-Май-18 08:45 
Тут про эти ваши безопасные сериализаторы xml и json  https://www.github.com/mbechler/marshalsec/blob/master/marsh...

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 28-Май-18 10:12 
> Тут про эти ваши безопасные сериализаторы xml и json  https://www.github.com/mbechler/marshalsec/blob/master/marsh...
>json

Жусон* то причем? В жусоне ПРИНИПИАЛЬНО нет встроенной  возможности задания исполняемого кода, там только строки, массивы, числа, да объекты(хеш-таблицы).
Другое дело если туповатый десериализатор начинает интерпретировать вышеперечисленное как исполняемых код.
Например в Java, где при десериализации хештаблицы вызывается метод hash() пользовательских объектов, где может быть произвольный код.


(да, по мнению изобретателя JSON - Д. Крокфорда, название формата произносится именно так)



"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено J.L. , 28-Май-18 14:14 
> Например в Java, где при десериализации хештаблицы вызывается метод hash() пользовательских
> объектов, где может быть произвольный код.

тоесть java десерилизует функции экземпляра объекта не на основе кода класса из заголовка потока, а на основе байткода функции из потока ??

//offtop
> (да, по мнению изобретателя JSON - Д. Крокфорда, название формата произносится именно так)

"Жусон" - жесть то какая...


"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Илья , 29-Май-18 09:25 
Ты можешь сериализовать любую имплементацию интерфейса. Система, на которой производится десериализация, может вообще не знать ничего об этой имплементации. По сути, сериализованный объект - это данные плюс поведение. Если нужны только данные, то есть "универсальные конвертеры" в JSON, XML и любые другие форматы. Если же нужно принимать именно реализацию - то обычно пользуются стандартной сериализацией. Это удобно. Но нужно понимать, что либо ты организовываешь безопасность получения этого кода, гарантируя, что посторонний код не может быть загружен. Либо обвешиваешься политиками безопасности.

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено VladSh , 29-Май-18 12:25 
А ЭЦП никак сюда не прикрутить?

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Дмитрий Быстров , 30-Май-18 13:24 
Вы неправы!

Вы не можете сериализовать интерфейс. Сериализуется объект, реализующий интерфейс. В поток записывается полное название класса этого объекта и данные полей. Если поле - это ссылка на другой объект, то описанная процедура выполняется и для него. Если поле ссылается на уже записанный в поток объект (циклическая ссылка), то пишется информация об этом.

При десериализции объекты восстанавливаются по полному названию классов. При этом классы эти могут быть совершенно другими (с другим набором методов и даже с реализацией совершенно других интерфейсов).

Таки образом, поведение не сериализуется! Проверено на практике


"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Дмитрий Быстров , 30-Май-18 13:34 
> Например в Java, где при десериализации хештаблицы вызывается метод hash() пользовательских
> объектов, где может быть произвольный код.

В этом виновата не стандартная сериализация, а реализация класса HashMap. Там есть метод readObject, котором написана своя процедура десериализации, точно некоторые действия после стандартной десериализации


"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 28-Май-18 13:14 
Я правильно понимаю, что все приложения под старыми версиями явы как работали, так и будут работать дальше, а вот при переходе на новые версии явы разработчики должны будут не забыть озаботиться заменой сериализации?

"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено J.L. , 28-Май-18 14:15 
> Я правильно понимаю, что все приложения под старыми версиями явы как работали,
> так и будут работать дальше, а вот при переходе на новые
> версии явы разработчики должны будут не забыть озаботиться заменой сериализации?

95% что да
вероятно в жавамашине будет "если версия скомпиленного байткода > N - запрещай старое


"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено dq0s4y71 , 29-Май-18 12:25 
Хаха. Ничего "безопаснее", чем

fopen();
fwrite();
fclose();

так и не смогли придумать ;)


"Oracle планирует убрать из Java встроенную поддержку сериали..."
Отправлено Аноним , 30-Май-18 13:28 
Короче мы облажались и ничего поправить немОгем.