All streams
Search
Write a publication
Pull to refresh
80
0
Maksim Kochkin @MaxxArts

PHP pro, Go noob, websec fan

Send message

Я проверил GraphicsMagick (у меня под рукой оказалась версия 1.3.20 2014-08-16 Q8, не уверен, что это прям свежак), он подвержен как минимум чтению локальных файлов через label (CVE-2016-3717), правда, рендерится только первая строчка файла. Возможно, это как-то обходится, но суть в том, что пользователям GM всё-таки стоит начать беспокоиться. SSRF через url точно не работает.

По-моему, на данный момент уже должны быть доступны патчи, устраняющие проблему. Кажется, они даже уже были доступны на момент написания того поста.
С «чистым» PHP понятно, а вот про intl не знал, спасибо.
Я прочитал пост (видимо — невнимательно?), но так и не понял, зачем автор пересобирал intl, тогда как надо было просто обновить timezondb.
Этим комментарием вы хотели показать, что не прочитали статью?)
> не будет необходимости считать сколько щас у нас/ у них времени

Вы и сейчас можете не считать, но только что вам это даст?

Идея в том, что куда бы ты ни приехал, ты уверен, что 8-9 часов утра — это светлое время суток, в которое начинают работу люди, открываются магазины, кафе и прочие заведения, а в где-то в 23 часа уже точно темно, и почти наверняка будут проблемы с поиском общественного транспорта. То есть, в основном, это разделение на светлое/тёмное время суток, понимание ключевых точек типа полдень/полночь.

Иными словами, вы смотрите с технической точки зрения, с единым временем действительно удобнее работать. Но с чисто человеческой — это ужас.
По этому комментарию складывается впечатление, что вас soft-mocks не устраивают. Или я не так понял?
Ну, вообще, у нас не так много таких мест, где без хардкорных моков прям не обойтись, это крайние случаи (и случаи приступов лени). Мы стараемся избегать подобной фигни. Поэтому, думаю, вероятность не такая большая. Хотя это зависит от того, насколько новую версию PHP вы имеете в виду. Для PHP 8 наверняка придётся патчить. А так — норм.
А, сорри, это тот компонент, в репозитории которого написано "The replacement layer is limited to the locale "en". If you want to use other locales, you should install the intl PHP extension instead.", да?
Подождите, вы сейчас обсуждаете компонент, в репозитории которого написано "[DEPRECATED] This repository only exists for BC compatibility with old versions of Symfony. Recent versions comes with ICU data.", я правильно понимаю?
То, что я вижу по ссылке, — не полноценная локаль. Это только переводы. Как я писал, локаль, это ещё и порядок размещения даты и времени. Но это так, к слову. Само собой, эта либа к полноценной локализации не имеет отношения.
98% разрабочиков (включая меня) забили бы и пошли дальше.

Представьте, что вы заходите на сайт, а там даты типа «Февраль. 10» или «10-февраля,» или ещё что-то такое невразумительное. Это примерно так видят даты пользователи из других стран, когда вы для них плохо локализуете. Представили? Вот я постоянно заставляю себя это представлять, и это отлично помогает не забивать.
Блин, убедили. Если я окончательно сойду с ума, портирую всё это дело на PHP. После месяца исследований этой темы у меня оформилась аллергия на ICU и intl, так что это случится не скоро.
Хороший вопрос, на самом деле. Такой вариант я рассматривал как резервный. Так сложилось, что я ни в C++, ни в Java не умею на достаточном уровне. Честно говоря, я рассчитывал, что есть какая-то готовая утилита, которую можно было бы подёргать как раз для этих целей. Искал, не нашёл. Решил попробовать написать расширение. Случайно получилось, поэтому так.
Я глянул в http://source.icu-project.org/repos/icu/icu4j/trunk/main/classes/core/src/com/ibm/icu/text/DateTimePatternGenerator.java, и один только список импортов (не включая структуры данных, части которых нет в PHP) приводит в ужас

import com.ibm.icu.impl.ICUCache;
import com.ibm.icu.impl.ICUResourceBundle;
import com.ibm.icu.impl.PatternTokenizer;
import com.ibm.icu.impl.SimpleCache;
import com.ibm.icu.impl.SimpleFormatterImpl;
import com.ibm.icu.impl.Utility;
import com.ibm.icu.util.Calendar;
import com.ibm.icu.util.Freezable;
import com.ibm.icu.util.ICUCloneNotSupportedException;
import com.ibm.icu.util.ULocale;
import com.ibm.icu.util.ULocale.Category;
import com.ibm.icu.util.UResourceBundle;
import com.ibm.icu.util.UResourceBundleIterator;

Ну то есть, может я суперслоупок, но это точно не 3 часа для меня, даже не 3 дня. Возможно, кто-то мог бы взяться за это, было бы отлично. Но стоит помнить, что всё это нужно затем поддерживать в актуальном состоянии. Сейчас — обновили ICU, пересобрали PHP, и поехали дальше.

ICU портировать не надо, т.к. весь необходимый функционал для портирования одного класса уже есть: Locale и ResourceBundle.

Можно чуть подробнее об этом?
А это потому, что Twitter сделал это по-человечески — на Javascript.

Это неправда. Достаточно посмотреть в исходный код ленты Твиттера: он приходит с отформатированными датами уже с сервера.

Тут вам и отсутствие необходимости знать часовой пояс клиента

Это вообще как так? Вероятно, вы имели в виду «нет необходимости хранить временную зону пользователя на сервере»? Допустим. Но локализовывать дату нужно не всегда на клиенте. Иногда, скажем, это дата в письме: «тогда-то случилось/случится то-то, приходите и будет круто». И тут без какого-либо знания временной зоны пользователя уже никак.

Кроме всего этого есть легаси код, есть технические требования, от которых не уйти.
Не знал, что Твиттер написан на PHP, да ещё и выложен в открытый доступ. Пошёл изучать!
ценность расширения только в поводе для неплохой статьи

Вот это сейчас обидно было. Статью я писал где-то 2-3 недели, искал готовые решения, спрашивал у разработчиков, изучал крупные кодовые базы, изучал ICU и код на C++, который использует ICU. Расширение написано исключительно как акт отчаяния.

делать надо было именно библиотекой

Как именно сделать это библиотекой? Написать пустую обёртку над классом расширения? Допустим. Но как это поможет пользователям? Собирать расширение всё равно нужно руками под свою систему. И так будет до тех пор, пока разработчики PHP не включат нечто подобное в intl.

Уже второй комментарий, намекающий, что лучше было бы это вообще на чистом PHP реализовать. И я начинаю задумываться: или же вы просто невнимательно прочитали пост, или, может быть, я что-то упускаю? В случае последнего искренне буду благодарен за пояснения. Потому что с моей точки зрения вы предлагаете портировать ICU на PHP и после поддерживать постоянно этого зверя.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity