The OpenNET Project / Index page

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

Релиз языка программирования PHP 7.3

06.12.2018 22:15

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

Ключевые улучшения в PHP 7.3:

  • Реализован гибкий синтаксис многострочной вставки (строки heredoc и nowdoc), не требующий обязательного перевода строк после маркера окончания блока и допускающий выравнивание отступами;
  • Добавлена поддержка назначения ссылок в list(): теперь поддерживается синтаксис "list($a, &$b) = $array;", эквивалентный присвоению "$a = $array[0]; $b =& $array[1];". Предложен также упрощённый синтаксис присвоения, позволяющий указывать вместо "list()" квадратные скобки, например "[$a, &$b] = $array;"
  • При вызове функций и методов теперь допускается оставление запятых в конце списка аргументов, например, "unset($foo, $bar, $baz,)";
  • Расширение PCRE переведено на ветку PCRE2;
  • Выражение "instanceof" теперь допускает указание литералов в качестве первого операнда (в такой ситуации результат всегда будет FALSE);
  • Добавлено новое исключение CompileError, наследуемое от ParseError и генерирующее для некоторых типов ошибок перехватываемое событие CompileError вместо фатальной ошибки;
  • Значительно расширены возможности и увеличена производительность дополнения MBString, в том числе добавлены полноценные средства для манипуляций с регистром символов (MB_CASE_LOWER, MB_CASE_UPPER, MB_CASE_TITLE, MB_CASE_FOLD и т.п.), до версии 11 обновлена поддержка спецификаций Unicode, добавлена поддержка строк, размером больше 2 Гб, в функциях mb_ereg_*() добавлена поддержка именованного захвата элементов. Объявлены устаревшими вызовы mbereg_*(), вместо которых следует использовать corresponding mb_ereg_*();
  • В SAPI-модуль FPM добавлены новые глобальные опции log_limit и log_buffering для ограничения размера выводимой в лог строки и включения режима записи в лог без буферизации. Также добавлена опция decorate_workers_output, позволяющая отключить декорирование вывода от рабочих процессов при активации режима catch_workers_output;
  • В расширении LDAP в большинстве функций, таких как ldap_add и ldap_read, появился параметр serverctrls для отправки на сервер дополнительных сообщений (LDAP Controls - механизм расширения операций LDAP и передачи дополнительной информации вместе с запросом), а в ldap_parse_result для получения клиентом дополнительных сообщений от сервера. Налажена поддержка режимов LDAP_OPT_SERVER_CONTROLS и LDAP_OPT_CLIENT_CONTROLS в функциях ldap_get_option и ldap_set_option;
  • В заголовок страницы phpinfo(), добавлено отображение переменной PHP_VERSION;
  • В расширение Date добавлен метод DateTime::createFromImmutable();
  • В расширение GD в функции imagecreatefromstring() появилась поддержка создания изображений в формате WebP;
  • При сборке с опцией configure --with-password-argon2 в функциях password_hash(), password_verify(), password_get_info() и password_needs_rehash() обеспечена поддержка алгоритмов хэширования паролей Argon2i и Argon2id;
  • Добавлена функция hrtime() для вывода значения времени (число секунд и наносекунд) на основании показаний монотонного таймера, отражающего неразрывно увеличивающееся время, прошедшее с определённого момента в прошлом;
  • Представлена новая функция net_get_interfaces() для получения информации о доступных сетевых интерфейсах;
  • Улучшена работа сборщика мусора;
  • Переписана на PHP утилита ext_skel (генерирует шаблоны кода дополнений), для запуска которой теперь не нужно дополнительных зависимостей и её можно запускать в том числе в Windows ('php ext_skel.php');
  • Объявлено устаревшим определение имён констант не чувствительных к регистру (определялись при помощи указания в define специального флага).
  • Приведены к соответствию с поведением Unix операции открытия файлов в Windows: файловые дескрипторы теперь по умолчанию открываются в Windows в режиме, допускающем чтение, запись и удаление (открытые файлы теперь можно удалить);
  • Прекращена поддержка платформы BeOS.


  1. Главная ссылка к новости (http://php.net/archive/2018.ph...)
  2. OpenNews: Релиз языка программирования PHP 7.2
  3. OpenNews: Уязвимость, позволяющая удалённо выполнить код на сервере PHP-репозитория Packagist
  4. OpenNews: В PHPMailer выявлена ещё одна критическая уязвимость, вызванная недоработкой в PHP
  5. OpenNews: Уязвимость в движке для создания форумов phpBB
  6. OpenNews: Доступен Composer 1.0.0, менеджер зависимостей для PHP
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/49732-php
Ключевые слова: php
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (121) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.5, Аноним (5), 22:35, 06/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +14 +/
    > Прекращена поддержка платформы BeOS.

    То ли у них был человек, все эти годы поддерживающий версию для BeOS не смотря ни на что, и тогда хочется пожать ему руку, то ли они только сейчас поняли, что BeOS никто в реальности не поддерживает, а у них нигде это не отмечено.

    PS. В идеале они бы заменили BeOS на HaikuOS, а то воз который год всё там же https://github.com/php/php-src/pull/2697

     
  • 1.9, Аноним (9), 23:06, 06/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +21 +/
    Язык весьма неплохой. В каждой функции есть своя изюминка. Например, при помощи file_exists() можно не только проверить существование файла, но и начать выполнять код, заботливо предоставленный третьей стороной. Удобная фича, рекомендую.

    Если в вашем языке функция проверки существования файла не способна запускать код, просьба меня не беспокоить.

     
     
  • 2.10, Аноним (10), 23:14, 06/12/2018 [^] [^^] [^^^] [ответить]  
  • +5 +/
    То ли дело хипстота, помешанная на магии современных ЯП и фреймворков, не позволяющих бедолагам стрелять себе в ногу даже если захотят.
     
     
  • 3.29, Аноним (29), 02:45, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Обидно оказаться с револьвером, когда у кого-то пулемёт на турели.
     
     
  • 4.44, Онаним (?), 09:29, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Да ладно, в хипстерских поделках там сам рантайм обычно просто косая кирпичная кладка из говнозависимостей, подтянутых с говнореп, которые мейнтейнятся непонятно кем и непонятно как до первого залетевшего дятла. По сравнению с этим пых - эталон простоты, если композером не баловаться.
     
  • 2.31, ъ (?), 03:20, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Например, при помощи file_exists() можно не только проверить существование файла, но и начать выполнять код, заботливо предоставленный третьей стороной.

    Пример можно?

     
     
  • 3.60, blblblblbl (?), 11:02, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    не будет примера, это же очевидно
     
  • 3.62, YetAnotherAnon (?), 11:06, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    30 секунд в гугле
    https://blog.ripstech.com/2018/new-php-exploitation-technique/
     
     
  • 4.63, blblblblbl (?), 11:35, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > First, an attacker must be able to plant a crafted Phar file on the targeted web server.

    уже смешно

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

     
  • 4.65, Ilya Indigo (ok), 11:45, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Вы хоть сами прочитали этот бред?
    Это из той же оперы как вирус для линукса для запуска которого нужно пропатчить ядро определённой версии нужным патчем.
     
  • 4.71, ъ (?), 12:17, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > 30 секунд в гугле
    > include($_GET['file'])

    А, ну примерно такой глубины кульхацкерской мысли я и ждал.

     
  • 3.72, userd (ok), 12:20, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    http://www.opennet.ru/opennews/art.shtml?num=49641
     
     
  • 4.77, blblblblbl (?), 13:05, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Уязвимость вызвана отсутствием проверки поступающих от пользователя данных

    это всё, что нужно знать

     
  • 2.64, Ilya Indigo (ok), 11:39, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > file_exists()

    1 file_exists() - бесполезная ф-ия, так как не проверяет доступен ли файл может он существует, но него прав нет?
    2 is_readable() - когда нужно подключить или вывести,
    is_writable() - когда нужно изменить или удалить.
    3 /tmp или иное место заданное в конфиге для этого должно быть с noexec флагом, в fstab, это ясно как день!
    4 Ну и, естественно, записывая файл, вы должны указать ему нужные права (0600|0640|0660) БЕЗ бита выполнения.

    Это я знал ещё 10 лет назад когда говносайты на Джумле писал.
    Как тут выполнить файл через file_exists() можно - ума не приложу!

     
     
  • 3.70, fi (ok), 12:13, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > file_exists() - бесполезная

    ну не скажи - если файл используется для синхронизации - тот же lock
    и в шеле постоянно такие проверки делаются.

     
     
  • 4.75, userd (ok), 12:37, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Давайте вынесем шелл за скобки, и собственно содержательную часть проверки существования файла - тоже.

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

    используйте flock:

    http://www.opennet.ru/man.shtml?topic=flock&russian=0&category=&submit=%
    http://www.opennet.ru/man.shtml?topic=flock&category=1&russian=2
    http://php.net/manual/en/function.flock.php

     
     
  • 5.82, SenaIVV (?), 13:32, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Лет 10 точно использую кэш для сайтов, самая первая строка любого урла на любом моем сайте file_exists(файл в кэше на основании текущих переменных урла из .htaccess)

    И далее уже сразу require_once(файлкэша) exit()
    или пошло выполнение кода, который запросит все данные страницы и затем отдаст в браузер, ну и запишет в файл кэша это всё.

    Любая отличная от file_exist функция при многотысячных тестах, выполняется медленнее, чтобы проверить существоваание файла кэша на диске.Включая прямое подключение файла с генерацией кода по ошибке.

     
     
  • 6.83, blblblblbl (?), 13:36, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    мало запросов значит, ибо file_exists при инвалидации не атомарен и можно нарваться на dog pile при  генерации нового кеша
     
     
  • 7.84, SenaIVV (?), 13:41, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Абсолютно никак такое не получить. Файл просто накроется новым параллельным кодом последнего пишущего, до момента следующей валидации. Говорю же - делал многтысячные тесты, включая параллельную нагрузку - все гуд, самое быстрое решение на текущий момент, НЕТ НИЧЕГО БЫСТРЕЕ!
     
     
  • 8.86, blblblblbl (?), 13:54, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    про это я и говорю, не должно быть более одного писателя _ если писателей 1 зн... текст свёрнут, показать
     
     
  • 9.88, SenaIVV (?), 14:06, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Если писать кэш одной строкой, один раз для файла, то без разницы сколько конкур... большой текст свёрнут, показать
     
     
  • 10.89, blblblblbl (?), 14:22, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Я за 20 лет столько таких кешей повидал и к чему это приводит, что до сих пор уд... текст свёрнут, показать
     
     
  • 11.90, SenaIVV (?), 14:33, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Вам ан каком языке написать - тест 64мб памяти которых уже никогда не увидеть ... текст свёрнут, показать
     
     
  • 12.103, blblblblbl (?), 15:26, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    я никого уговаривать не собираюсь, делайте как хотите, размер памяти тут не при ... текст свёрнут, показать
     
  • 12.116, Аноним (116), 17:16, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Есть пример с файловым кэшем для околореалтайм интерфейса is_file проверка ко... текст свёрнут, показать
     
     
  • 13.117, Аноним (116), 17:20, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Выглядит сие высокоуровнево вот так first, try from cache if ... текст свёрнут, показать
     
     
  • 14.118, Аноним (116), 17:25, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ну и readCache с lockCache static protected function readCache id, items, ... большой текст свёрнут, показать
     
  • 13.119, blblblblbl (?), 17:29, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    кеш околореалтайм генерится схема какая ... текст свёрнут, показать
     
     
  • 14.121, Аноним (116), 17:41, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Обновление кэша - три-четыре запроса поверх ZeroMQ к фоновым частям приложения ... текст свёрнут, показать
     
  • 14.122, Аноним (116), 17:43, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ну то есть писателей в моей схеме нет, читатели сами обновляют кэш В случае с п... текст свёрнут, показать
     
     
  • 15.129, blblblblbl (?), 18:35, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Под писателями я имею ввиду тех читателей, которые обнаружили невалидный кеш и п... текст свёрнут, показать
     
     
  • 16.131, Аноним (116), 18:48, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Читатель видит протухший кэш и пытается взять LOCK_EX Как только LOCK_EX взят -... текст свёрнут, показать
     
     
  • 17.132, blblblblbl (?), 19:15, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Получается, что несколько потоков могут одновременно считать новое значение, т к... текст свёрнут, показать
     
     
  • 18.135, Онаним (?), 00:38, 08/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Нет, не могут Несколько потоков могут контендиться на LOCK_EX на время валидаци... текст свёрнут, показать
     
  • 18.136, Онаним (?), 01:09, 08/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Для обхода конкуренции с ридерами и предотвращения рейсов сделана хитрость лок-... большой текст свёрнут, показать
     
  • 11.91, SenaIVV (?), 14:37, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    И да, я же вам написал - люди делающие php не сопли жуют, а пишут код Писатели ... текст свёрнут, показать
     
  • 10.120, Аноним (116), 17:35, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Проще делать блокировку с обновлением при чтении, проверяя на обновление соседом... текст свёрнут, показать
     
  • 6.97, Ilya Indigo (ok), 15:02, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > И далее уже сразу require_once(файлкэша) exit()

    Если уж дело идёт про скорость, то require_once() - это костыль рукожопов, который нафиг не нужен нормальным программистам, а выполняется он медленнее чем require().

    > Любая отличная от file_exist функция при многотысячных тестах, выполняется медленнее,

    Логично, что проверка на существование и на доступность для чтения медленнее проверки только на существование. А без проверки вообще ещё быстрее будет!

    Если у Вас, конечно, не оффтопик, то Вы получите ошибку, если окажется что файл существует, но он не доступен для чтения.

     
     
  • 7.102, SenaIVV (?), 15:23, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Нет, у меня такой ситуации не может быть, что файл есть, но не доступен для чтения - в этом и смысл и скорость конкурентной записи.

    На счет require_once - если нет совпадающих пространств имен, одинакова скорость.
    У меня нет таких пространств. Просто по привычке осталось с самых азов еще, всегда инклюдить и запрашивать исполнение через гарантию отсутствия дублей функций.

    В самом начале такие коды были, что без этого было никуда :)

     
     
  • 8.107, Ilya Indigo (ok), 15:59, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Буду знать что file_exists кому-то всё же нужна на мой взгляд в редкой для PHP... большой текст свёрнут, показать
     
  • 7.104, SenaIVV (?), 15:30, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    И, кстати, на счет скорости проверки наличия - не все так очевидно. Я до теста считал, что прямое включение без проверки наличия файла и код в обработчике ошибок - быстрее (без кэширования, первый запрос такого типа отрабатывает быстрее, чем первая проверка наличия файла). Но при повторном вызове, file_exists сразу начинает выигрывать.
     
  • 6.133, hellobillyboy (?), 20:32, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    о! классное решение, выложи пожалуйста посмотреть на кодохостинг
    https://govnokod.ru/php

    спасибо!

     
  • 5.85, blblblblbl (?), 13:51, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    flock не панацея
    нужно делать pid-файл через fopen x+ и проверять статус процесса, если файл существует
     
     
  • 6.92, Sw00p akaJerom (?), 14:42, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    версионность через симлинк
     
     
  • 7.98, blblblblbl (?), 15:07, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    это уже детали реализации, можно и через mv, смотря что делается, новый tmp тоже надо лочить и писать правильно
     
  • 7.99, blblblblbl (?), 15:09, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    т.е. если делаешь демона, то симлинк тут никаким боком, в остальном страдать версионностью можно разными способами :)
     
  • 5.124, fi (ok), 18:12, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > используйте flock:

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

     
  • 3.78, blblblblbl (?), 13:07, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Эксплоит работает, но ровно в одном случае: данные от юзера не фильтруются и используются напрямую.
     
     
  • 4.108, Ilya Indigo (ok), 16:04, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > Эксплоит работает, но ровно в одном случае: данные от юзера не фильтруются
    > и используются напрямую.

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

     
  • 3.111, пох (?), 16:48, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    > file_exists() - бесполезная ф-ия, так как не проверяет доступен ли файл может он существует,
    > но него прав нет?

    откуда в нормальной системе возьмется такой файл? В том месте, где появляются какие-то файлы, доступные php? (к тому же *тебе* может и не нужны на него права - может это просто статическая картинка, ее открывает веб-сервер,а не скрипт на php)

    > is_readable() - когда нужно подключить или вывести,

    полагаю, он точно так же исполняет подсунутый phar.

    > /tmp или иное место заданное в конфиге для этого должно быть с noexec флагом

    милый ребенок, ты вообще хоть что-нибудь понял в описанном эксплойте, кроме "у меня этого не может быть, я же умный и начитанный"?

     
  • 2.127, Аноним (127), 18:28, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    https://blog.ripstech.com/2018/new-php-exploitation-technique/

    https://securityboulevard.com/2018/12/bypass-of-disabled-system-functions/

    https://blog.ripstech.com/2018/phpbb3-phar-deserialization-to-remote-code-exec

     

  • 1.11, Аноним (11), 23:15, 06/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +8 +/
    > Прекращена поддержка платформы BeOS

    Не ожидал от них такой подлости! Прямо удар в спину!

     
  • 1.12, Аноним (12), 23:28, 06/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > При вызове функций и методов теперь допускается оставление запятых в конце списка аргументов, например, "unset($foo, $bar, $baz,)";

    Но зачем?

     
     
  • 2.13, Пользователь Debian (?), 23:32, 06/12/2018 [^] [^^] [^^^] [ответить]  
  • +9 +/
    чтобы(
      можно,
      было,
      вот,
      так,
    )
     
  • 2.14, КГБ СССР (?), 23:32, 06/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >> При вызове функций и методов теперь допускается оставление запятых в конце списка аргументов, например, "unset($foo, $bar, $baz,)";
    > Но зачем?

    Возможно, через ЭТО уже кто-то как-то зловредничал.

     
  • 2.15, Аноним (15), 23:38, 06/12/2018 [^] [^^] [^^^] [ответить]  
  • +10 +/
    unset(
        $very_long_name,
        $very_very_long_name,
        $very_very_very_long_name,
    //  $very_very_very_very_long_name
    );

    для того

     
  • 2.17, Антон (??), 23:53, 06/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    слизали с js, хотя может в js тоже взяли откуда то.
    На самом деле довольно удобно, можно комментить ненужное и добавление параметра влечет изменение одной строки в гит, а не двух.
     
     
  • 3.18, Q2W (?), 00:11, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В perl'е это уже кучу лет можно.
    Просто супер удобно!
     
     
  • 4.25, Аноним (25), 01:20, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Write-only language.
     
     
  • 5.33, Аноним (33), 04:48, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Если у Вас проблемы с чтением такого(https://github.com/bugzilla/bugzilla/blob/5.0/editusers.cgi) кода, то и код современного PHP, понять Вы не сможете.
     
  • 5.34, Аноним (34), 05:50, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Write-only аноним
     
  • 4.42, Антон (??), 09:18, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    мне этого сильно не хватает в SQL. Я уже задолбался эту последнуюю запятую ставить и удалять
     
     
  • 5.66, vedronim (?), 11:49, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    А где там массивы?
     
     
  • 6.73, ъ (?), 12:23, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    В инсертах, например.
     
  • 3.134, Junior frontend developer (?), 21:14, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Во все языки это добавляют со временем
     
  • 2.21, Григорий Федорович Конин (?), 00:42, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    затем же зачем в массиве можно оставлять запятую :)
     
  • 2.40, Rom1 (??), 08:16, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Для удобства
     
  • 2.87, SenaIVV (?), 13:56, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Это как раз-таки самое нужное, а то я давно устал уже при динамических строках массивов удалять последний символ запятой(при чем разными с..а функциями для utf-8 и windows-1251).
     

  • 1.19, Ilya Indigo (ok), 00:22, 07/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    > При сборке с опцией configure --with-password-argon2 в функциях password_hash()...

    Да сдалась 300 лет эта убогая ф-ия для идиотов, в которой ещё заботливо запретили использовать свою соль!
    Лучше бы в hash_hmac() алгоритмы bcrypt и argon2(i|id|d) завезли.
    А так всё равно приходится пароли алгоритмом sha3-512 хешировать. :-(

    А так ничего сильно полезного пока не увидел, но и нарушающего совместимость тоже.

    P.S. Прошёл уже год а документация по sodium всё также отсутствует даже на английском.
    https://secure.php.net/manual/en/book.sodium.php

     
     
  • 2.24, blblblblbl (?), 01:19, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    У тебя что, соль какая-то особая, забористая?
    Чем обычная не устраивает, а?
     
     
  • 3.46, Ilya Indigo (ok), 09:32, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Особенная, состоящая из статической и динамической части, при этом статическая хранится в конфиге, а динамическая берётся из id и время регистрации, которые запрещено менять в БД, а главное только я знаю как готовить хэш, и только я знаю как его проверять! А я всегда точно знаю, каким алгоритмом он будет создан и обязательно будет проверен, а также точно какой длины он будет!

    password_hash()/password_verify() предполагает что соль с параметрами всегда хранится с хешем, и алгоритм, соль и параметры мало того что всем известны, так ещё он всегда готовится и проверяется одинокого и password_verify() можно скормить вообще любой валидный хэш подсунув его вместо хэша требуемого пользователя!
    Такого мне не нужно, кушайте сами!

     
     
  • 4.55, Аноним (55), 10:42, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +3 +/
    > а главное только я знаю как готовить хэш, и только я знаю как его проверять

    Security by obscurity? Спец, без сомнения!

     
  • 4.56, blblblblbl (?), 10:43, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Т е утекла каким-то образом статическая часть, здравствуй генерация новых парол... большой текст свёрнут, показать
     
     
  • 5.61, Ilya Indigo (ok), 11:06, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    1 НЕТ Без динамической части соль бесполезна, для генерации нужна и соль и данн... большой текст свёрнут, показать
     
     
  • 6.68, blblblblbl (?), 12:02, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > 1 НЕТ! Без динамической части соль бесполезна, для генерации нужна и соль и данные из БД для каждого пользователя!
    > 2 Для password_hash()/password_verify() здравствуй генерация новых паролей By Design!

    1. зачем тогда статический кусок? без него это такой же хеш: динамическая соль + алгоритм хеша
    2. с чего вдруг? тут перегенерация только если база утекла и то не так страшно, т.к. секретного алгоритма нет, а хеши достаточно стойкие.

    > Если он получил доступ к ssh, то тут, конечно, уже ничего не поможет.

    А если это админ-обиженка?
    Все алгоритмы на руках, прикопает до поры.

    Ну и если кто-то со стороны ходит по базе как у себя дома, то уже всё плохо.

     
     
  • 7.74, Ilya Indigo (ok), 12:35, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Затем, чтобы 1 При получении доступа к БД злоумышленник не смог получить всю сол... большой текст свёрнут, показать
     
     
  • 8.94, Sw00p akaJerom (?), 14:54, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    идея не плохая с разделением на части соли, но прикол в том, что постановка зада... текст свёрнут, показать
     
     
  • 9.101, Ilya Indigo (ok), 15:22, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Я с вами не согласен 1 Без ssh доступа к серверу нет, а если доступ получен, то... большой текст свёрнут, показать
     
     
  • 10.106, Sw00p akaJerom (?), 15:50, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    принято, если со мной не согласны, то посоветую более вторитетный источник - Б ... большой текст свёрнут, показать
     
  • 5.93, Sw00p akaJerom (?), 14:44, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    на то и коллизии существуют
     
     
  • 6.100, blblblblbl (?), 15:20, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    какова вероятность коллизии у bcrypt с blowfish или argon2?
    тупой брутфорс на видеокарте на 4 порядка медленнее, чем у того же sha512

    в конце-концов выяснилось, что защищается от подмены хеша в базе, чтоб не дать залогиниться потом под паролем для этого хеша

     
     
  • 7.105, Sw00p akaJerom (?), 15:38, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > какова вероятность коллизии у bcrypt с blowfish или argon2?

    ровно такая же как и md5, все зависит от битности.

    > тупой брутфорс на видеокарте на 4 порядка медленнее, чем у того же
    > sha512

    от чего зависит эта "медленность" ?

    > в конце-концов выяснилось, что защищается от подмены хеша в базе, чтоб не
    > дать залогиниться потом под паролем для этого хеша

    что имелось тут ввиду я не понял

     
     
  • 8.110, blblblblbl (?), 16:46, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    а в реальной жизни, без применения велосипедов тот же солёный md5 можно, но реа... текст свёрнут, показать
     
     
  • 9.112, blblblblbl (?), 16:49, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Собственно я к тому, что любой хеш нам только даёт возможность распознать утечку... текст свёрнут, показать
     
  • 2.26, blblblblbl (?), 01:21, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Лучше бы в hash_hmac() алгоритмы bcrypt и argon2(i|id|d) завезли.

    ну если так надо, берёшь С и завозишь пулл-реквестом

    > А так всё равно приходится пароли алгоритмом sha3-512 хешировать. :-(

    зачем?

     
     
  • 3.49, Ilya Indigo (ok), 09:42, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > ну если так надо, берёшь С и завозишь пулл-реквестом

    Трачу от недели до месяца на разбор всех тонкостей как это делается, реквестю, и в лучшем случае посылаюсь сразу, мол для паролей жрите password_hash()/password_verify() а hash_hmac вообще совсем для другого предназначен, а в худшем мой реквест просто будет висеть мёртвым грузом.
    Бывало, может не месяц, но достаточное кол-во времени тратил на SR а меинтайнер с подобными объяснениями их отклонял.
    Не так уж часто, кол-во принятых гораздо больше, но уже чую за что можно взяться, а что будет простой тратой времени.

    > зачем?

    Затем, что в отсутствии возможности использовать bcrypt и argon2(i|d|id), sha3-512 остаётся самым надёжным алгоритм для хэша пароля.

     
  • 2.47, Мимокрокодил (?), 09:34, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    http://php.net/manual/ru/function.password-hash.php
     
     
  • 3.51, Ilya Indigo (ok), 09:45, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    И что?
    Внимание

    Эта опция была объявлена устаревшей начиная с PHP 7.0.0. Рекомендуется использовать автоматически генерируемую соль.

     

  • 1.28, java developer (?), 02:25, 07/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    отличный релиз замечательного инструмента. Всех поздравляем!
     
  • 1.39, Аноним (39), 08:00, 07/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +4 +/
    В целом, PHP стал похож на нормальный язык. В него бы ещё объектно-ориентированные примитивные типы и коллекции, да перегрузку операторов и можно  жить.
     
     
  • 2.43, nobody (??), 09:23, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Боюсь, что поезд ушёл. Ещё и оставив за собой огромный шлейф "былой славы"
     
  • 2.45, Онаним (?), 09:30, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Ну вот да, перегрузки операторов зело не хватает...
     
  • 2.48, Аноним (48), 09:35, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    >ещё объектно-ориентированные примитивные типы

    Зачем они тебе?

     
     
  • 3.52, Аноним (52), 10:09, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Затем, чтобы можно было сделать так $someArray-> и увидеть все методы для работы с массивами, а не гуглить их каждый раз.

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

     

  • 1.53, Попугай Кеша (?), 10:25, 07/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Все-то я согласен с вами. И все правильно пишите. PHP плохой, PHP ужасный, функция проверки наличия файла может запускать чужой код.

    И я вас понимаю. Как разработчик.

    Но вот звоню я другу (друг делает проекты для частников и не только).
    И спрашиваю: "Как дела, на чем пишите проекты?". На PHP - отвечает. Почему, интересуюсь? А он - "Ну ты понимаешь, на рынке PHP-разработчиков пруд пруди, платить им много не надо, можно быстро взять человека и доучить с улицы, что сделать нужно". Далее нужно где-то разворачивать. Nginx есть у всех, либо Apache. И любой полуобразованный админ может либо знаком с ними, либо знает как разворачивать. В общем, в любом захолустье знают про PHP как разрабы, так и админы. И искать долго не надо никого. И платить мало. Выгодно, в общем!

    Так что я с ним соглашусь. Для малого-среднего бизнеса это выгодно. Вот такой "народный" язык программирования получается. Это и не хорошо, и не плохо. Это данность.

    А в фирмах крупных, конечно, где бабки на бюджеты пилятся и осваиваются, там можно и Java взять на бекенд, или вашу эту хипстоту - Go/Ruby/Rust, хотите - C#.

    А народ - а народ оставьте в покое. Пусть пишет на своем PHPю

     
     
  • 2.57, blblblblbl (?), 10:58, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Всякие расплодившиеся курсы программирования говорят, что "можно быстро взять человека и доучить с улицы" питону и гошечке.
     
     
  • 3.58, Andrey Mitrofanov (?), 11:01, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Всякие расплодившиеся курсы программирования говорят, что "можно быстро взять человека
    > и доучить с улицы" питону и гошечке.

    Нет. Расплодившиеся курсы говорят, что "человеки с улицы" таки _покупают_ распложившиеся курсы.

    Про "можно научить" оное не говорит, ни-ни.

     
  • 3.59, Попугай Кеша (?), 11:02, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Есть спрос - есть предложение.
    Да, можно. Если загрузить человека несложной работой - например, верстать по шаблону (даже без знания CSS, на фреймворке) landing-страницы или как это сейчас модно - спецпроекты (какую-нибудь страницу, посвященную событию в городе, или фирме, или в год хомяка например).
    Правильно. Человека обучают HTML-ю за неделю. Вкачивают базу по PHP еще за одну неделю. И вот он может идти за 50-60 тысяч фигачить лендинги в фирмешку "Рога и копыта" у которой такой работы завались. Через год такого спеца начинают вкачивать в JS, и вот он уже "front-end джуниор"!
     
     
  • 4.81, blblblblbl (?), 13:31, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > Вкачивают базу по PHP

    какой такой php, везде только и видно питон, го и жс :)
    скоро, очень скоро там будет много макак, это уже заметно, вся илитность на хайпе пропала

     

  • 1.67, DmA (??), 11:51, 07/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    тут скорей всего быстрота нужна разработки для клиента, PHP позволяет выстрелить в ногу, если клиент так хочет. О конечной стоимости владения  своим сайтом клиент не сильно задумывается. Поэтому PHP -быстрее и дешевле
     
     
  • 2.69, Попугай Кеша (?), 12:10, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сравните сложность настройки сервера на PHP + цену за сервер с поддержкой PHP в месяц/год со сложностью настройки сервера на Java (ну или Ruby, Python, Go, что хотите) + цену за сервер на Java (или что хотите), например.

    Почему-то эти факторы наши многоуважаемые друзья-разработчики не учитывают.

    Сколько времени у вас уйдет? А время = деньги в мире бизнеса.

     
     
  • 3.80, blblblblbl (?), 13:27, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Разницы между настройкой nginx + php-fpm или nginx + python(ruby, go) нет, всё это делается за одно и то же время, виртуалка нужна и там, и там и за те же деньги.
     
     
  • 4.95, Попугай Кеша (?), 14:55, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Shared уже не использует никто? Я просто не знаю, расскажите
     
     
  • 5.114, пох (?), 16:56, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    скажу так - те, кто его используют, могли бы свою единственную страничку с телефоном разместить в гуглосайтах и не тратить деньги.

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

     
     
  • 6.115, Попугай Кеша (?), 17:03, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    Люди как не странно не любят обучаться. По привычке платят. Таких много.
     
  • 4.96, Попугай Кеша (?), 14:56, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Еще интересно за сколько вы Java развернете
     
     
  • 5.123, blblblblbl (?), 18:11, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    хз, у меня своего софта на джаве нет :)
    а вот эластик с полпинка заводится, стильно, модно, молодёжно
     
  • 2.113, пох (?), 16:54, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    грошовому клиенту нет необходимости задумываться о "конечной стоимости" - его сайт вместе с его лавочкой (сайт иногда даже позже, если за хостинг заплачено на год вперед) через полтора года перестает существовать вместе с децльным бизнесом.

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

     
     
  • 3.125, blblblblbl (?), 18:12, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    это ж осваивание бюджета, ты что =)
    других причин постоянно передылывать сайт нет
    как ещё честному манагеру денег потырить
     
     
  • 4.138, пох (?), 23:24, 08/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    > это ж осваивание бюджета, ты что =)
    > других причин постоянно передылывать сайт нет
    > как ещё честному манагеру денег потырить

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

     

  • 1.76, Аноним (76), 12:57, 07/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а я ещё на 5.6 сижу :-(
     
     
  • 2.109, DmA (??), 16:28, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    провинциал :)
     
  • 2.126, Аноним (126), 18:17, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • –1 +/
    У меня вот в компании только недавно подняли минимальную версию до 5.6 для выпускаемого продукта.
    Противные шареды не желают обновляться, противные клиенты не хотят в этом разбираться - грустные разработчики снова и снова лепят костыли на 5.6.
     
     
  • 3.139, пох (?), 23:24, 08/12/2018 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > Противные шареды не желают обновляться, противные клиенты не хотят в этом разбираться
    > - грустные разработчики снова и снова лепят костыли на 5.6.

    а так ведь хочется обмазаться свеженьким!


     

  • 1.79, Аноним (116), 13:24, 07/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Прелесть PHP - в его монолитном рантайме, в котором есть почти всё, что нужно для разработки, и которому в общем случае не нужны 100500 дополнительных файлов с 100500 классов в 3 строчки для реализации задач. Впрочем, любители сделать для языка с динамической сборкой 100500 таковых всё равно живы, и то, что у них в итоге на выходе получается глючная тормозящая блоатварь - не удивительно.
     
  • 1.128, Аноним (127), 18:32, 07/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    https://blog.ripstech.com/2018/phpbb3-phar-deserialization-to-remote-code-exec

    https://securityboulevard.com/2018/12/bypass-of-disabled-system-functions/

    https://blog.ripstech.com/2018/new-php-exploitation-technique/

     
     
  • 2.130, Аноним (127), 18:40, 07/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    https://rdot.org/forum/showthread.php?t=4379

     
     
  • 3.141, нах (?), 09:42, 11/12/2018 [^] [^^] [^^^] [ответить]  
  • +/
    ой, прекрасно, еще и getimagesize ВНЕЗАПНО исполняет код ;-)

     

  • 1.137, Аноним (137), 22:52, 08/12/2018 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Если пых переписать на Rust, то он станет хипсторским и его перестанут называть устаревшим! А еще безопасность будет!
     
     
  • 2.140, нах (?), 09:40, 11/12/2018 [^] [^^] [^^^] [ответить]  
  • –2 +/
    предлагаю делать форк!
    Если что, CoC я уже готов закоммитить. С вас readme.md!

    Задачи для следующей версии - список разработчиков к которым необходимо обращаться "Оно".

     

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



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

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