The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

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

27.05.2018 08:42

Марк Реинхольд (Mark Reinhold), главный архитектор платформы Java, считает, что добавление в 1997 году в язык Java поддержки сериализации объектов было ужасной ошибкой, которую приходится расхлёбывать в виде всё вновь и вновь всплывающих критических уязвимостей в различных продуктах на Java. По мнению Реинхольда, от трети до половины всех уязвимостей в Java-проектах связаны с сериализацией (кодированием объектов в последовательность байт для их сохранения или передачи), которая в силу простоты применения для решения многих задач провоцирует разработчиков на необдуманное использование.

Из соображений безопасности в долгосрочной перспективе Oracle планирует прекратить встроенную поддержку сериализации, предложив в качестве замены защищённый компактный фреймворк. Во фреймворке будет обеспечена возможность безопасной сериализации Java-версии классов данных и графов записей с возможностью манипуляции сериализированными данными в форматах JSON и XML. План будет реализован в рамках проекта Amber, сфокусированного на продвижении новых возможностей языка.

  1. Главная ссылка к новости (https://www.infoworld.com/arti...)
  2. OpenNews: Критическая уязвимость в Apache Struts
  3. OpenNews: Компания Red Hat выпустила язык программирования Ceylon 1.2
  4. OpenNews: Google открыл код FlatBuffers, библиотеки для эффективной сериализации данных
  5. OpenNews: Компания Oracle опубликовала Java SE 10 и прекратила поддержку Java SE 9
  6. OpenNews: Система машинного обучения для синтеза типового кода на языке Java
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/48666-java
Ключевые слова: java
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (46) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Вареник (?), 08:46, 27/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Решились, наконец.
     
  • 1.2, Аноним (-), 09:03, 27/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +15 +/
    Нужны более радикальные меры:

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

     
     
  • 2.3, Когда завезут поддержку GTA 5 (?), 09:19, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +6 +/
    У них, кстати, серьезные конкуренты. Вон, гному целый миллион подогнать хотят. Уж сколько они повыпиливают за эти деньги...
    Хорошей дорогой идём, товарищи.
     
     
  • 3.23, DerRoteBaron (?), 13:49, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +8 +/
    Надеюсь, первыми они выпилят экстеншены, так, чтобы ни люди ни Canonical не смогли использовать гном.
     
  • 2.53, X4asd (ok), 18:41, 29/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > "Oracle планирует убрать из Java встроенную поддержку Java"

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

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

     

  • 1.4, A.Stahl (ok), 09:44, 27/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +23 +/
    >Oracle планирует прекратить встроенную поддержку сериализации, предложив в качестве замены защищённый компактный фреймворк.

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

     
     
  • 2.5, Аноним (-), 10:00, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    У встроенной стандартизированные формат и поведение
     
     
  • 3.6, A.Stahl (ok), 10:20, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Это не проблема: вводится новый формат, старый объявляется deprecated и через несколько версий выбрасывается. Стандартная практика.
     
     
  • 4.7, Аноним (-), 10:22, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Если чуточку внести изменения в этот план, то получится EEE - https://ru.wikipedia.org/wiki/Embrace,_Extend,_and_Extinguish
     
     
  • 5.10, Аноним (-), 10:40, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +5 +/
    Оракл расширит и поглатит свою же джаву?
     
  • 5.21, IRASoldier (?), 13:37, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Диванным конспирологам настоятельно рекомендуется - покурить матчасть (если асилят):

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

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

     
  • 2.8, Аноним (-), 10:28, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    Необходимость поддержки обратной совместимости.
     
     
  • 3.9, A.Stahl (ok), 10:38, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А выбрасывание функциональности и перенос её во внешние фреймворки да ещё и с изменением формата не нарушает обратную совместимость?
     
     
  • 4.11, Аноним (-), 10:48, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Нарушает, но ты то предлогаешь изменить поведение стандартных классов и методов.
    А как определять какой из них как работает? По System.getProperty("java.version") или как?
    Обновили на компьютере ждаву, программа загружает уже сохраненные данные с диска, а там внезапно формат другой, и что будет?
     
     
  • 5.16, d (??), 11:05, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    implements SerializableNew
     
     
  • 6.17, Аноним (-), 11:10, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Мы разработаваем новый легковесный фреймворк для сериализации. Проект называется Amber, а маркерным интерфейсом для него будет SerializableNew
     
     
  • 7.28, Аноним (-), 16:41, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    class MyClass implements Serializable2 {
      static final long serialVersionUID2 = 1L;
    }
     
  • 5.25, Аноним (-), 15:18, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сохранить безопасный функционал, а опасный явно пометить как таковой, отключить по умолчанию, и предоставлять только для старого байткода или при установке флага.

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

     
  • 4.15, Аноним (-), 11:05, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Скорее всего его не выкинут из jvm вообще. Для программ использующих старый api будет доступна сериализация, а новый нет.
    Собственно вот и решение, пиши на Java 8-10 и не ной.
     
  • 2.13, kk (??), 10:50, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Так этож оракл, они сделают этот отдельный фреймворк платным и по подписке
     
  • 2.30, KonstantinB (ok), 19:19, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Универсальная сериализация по определению не может быть защищенной.
     
     
  • 3.41, Аноним (-), 09:57, 28/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Это еще почему?
    Вы все Rest api на базе JSON уже взломали?
     

  • 1.14, Аноним (-), 10:57, 27/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    Без удаления не щмогли исправить....
     
  • 1.18, Аноним (-), 11:26, 27/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто может гарантировать, что люди, написавшие ранее кривой код как часть жабы, теперь напишут ровный код уже как фреймворк?
     
     
  • 2.20, Аноним (-), 12:57, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В новости речь о кривом коде как части приложений. Он кривой, потому что неправильно использует определённую функциональность жабы, которую планируют убрать, чтобы больше не провоцировать разработчиков кривых приложений.
     
     
  • 3.36, obamma (?), 00:35, 28/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    дух времени: хотим искоренить убийства - уничтожим все ножи!
     
     
  • 4.42, Аноним (-), 09:59, 28/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > дух времени: хотим искоренить убийства - уничтожим все ножи!

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

     

  • 1.22, Аноним (-), 13:44, 27/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +6 +/
    > которая в силу простоты применения для решения многих задач провоцирует разработчиков на необдуманное использование.

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

     
     
  • 2.24, Crazy Alex (ok), 15:05, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • –3 +/
    Так вся жаба об ограничении возможностей, так и создавалась
     

  • 1.26, Аноним (-), 15:31, 27/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а чё сегодня 1-е апреля?
     
  • 1.27, Аноним (-), 16:40, 27/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    > которая в силу простоты применения для решения многих задач провоцирует разработчиков на необдуманное использование.

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

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

     
     
  • 2.34, Аноним (-), 23:00, 27/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Нет в этой фиче нифига важного. Вопрос в том, насколько они поломают обратную совместимость. А насчет графов Serializable тоже нифига предложить не может (т.е. зацикливание будет).
     
     
  • 3.40, max (??), 09:08, 28/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    С графами объектов стандартный механизм сериализации в java без проблем работает. Лишь бы хрень какую-нибудь написать.
     
     
  • 4.49, Аноним (-), 17:15, 28/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Если граф с циклами, будет циклить. Граф != дерево.
     
  • 2.48, Аноним (-), 16:47, 28/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    JSON прекрасно поддерживает циклические связи (введением внутреннего ID). Мне другое интересно: как вообще посторонняя функциональность может быть "небезопасной для языка"? Хоть бы одну "уязвимость" написали! Тот же JSON - он существует. И работает. И ни одного репорта "это опасно!". В чём соль??
     

  • 1.39, Аноним (-), 08:45, 28/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Тут про эти ваши безопасные сериализаторы xml и json  https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true
     
     
  • 2.43, Аноним (-), 10:12, 28/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Тут про эти ваши безопасные сериализаторы xml и json  https://www.github.com/mbechler/marshalsec/blob/master/marshalsec.pdf?raw=true
    >json

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


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


     
     
  • 3.46, J.L. (?), 14:14, 28/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Например в Java, где при десериализации хештаблицы вызывается метод hash() пользовательских
    > объектов, где может быть произвольный код.

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

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

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

     
     
  • 4.50, Илья (??), 09:25, 29/05/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ты можешь сериализовать любую имплементацию интерфейса. Система, на которой производится десериализация, может вообще не знать ничего об этой имплементации. По сути, сериализованный объект - это данные плюс поведение. Если нужны только данные, то есть "универсальные конвертеры" в JSON, XML и любые другие форматы. Если же нужно принимать именно реализацию - то обычно пользуются стандартной сериализацией. Это удобно. Но нужно понимать, что либо ты организовываешь безопасность получения этого кода, гарантируя, что посторонний код не может быть загружен. Либо обвешиваешься политиками безопасности.
     
     
  • 5.51, VladSh (?), 12:25, 29/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А ЭЦП никак сюда не прикрутить?
     
  • 5.54, Дмитрий Быстров (?), 13:24, 30/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Вы неправы!

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

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

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

     
  • 3.56, Дмитрий Быстров (?), 13:34, 30/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Например в Java, где при десериализации хештаблицы вызывается метод hash() пользовательских
    > объектов, где может быть произвольный код.

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

     

  • 1.45, Аноним (-), 13:14, 28/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я правильно понимаю, что все приложения под старыми версиями явы как работали, так и будут работать дальше, а вот при переходе на новые версии явы разработчики должны будут не забыть озаботиться заменой сериализации?
     
     
  • 2.47, J.L. (?), 14:15, 28/05/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Я правильно понимаю, что все приложения под старыми версиями явы как работали,
    > так и будут работать дальше, а вот при переходе на новые
    > версии явы разработчики должны будут не забыть озаботиться заменой сериализации?

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

     

  • 1.52, dq0s4y71 (ok), 12:25, 29/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хаха. Ничего "безопаснее", чем

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

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

     
  • 1.55, Аноним (-), 13:28, 30/05/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Короче мы облажались и ничего поправить немОгем.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру