Как устроен интернет? Протоколы передачи данных TCP/IP/HTTP. DNS и Доменные имена

протоколы передачи данных

В данном видео рассматривается специфика работы интернета, как он устроен, что такое протокол передачи данных TCP, HTTP. Какие бывают IP адресса, как взаимодействуют компьютеры между собой. Что такое доменное имя и DNS.

Выявлена уязвимость PHP 7, которая помогает перехватывать контроль над NGINX-серверами

уязвимость php7

Эксперты обнаружили в ветке PHP 7 уязвимость CVE-2019-11043, которая позволяет хакерам выполнять команды на сервере с помощью специально сформированного URL с добавлением ‘?a=’.

Данный баг активно применяется при атаках, так как его просто эксплуатировать. Проблему усугубило то, что в октябре на GitHub появился PoC-код для определения уязвимых серверов. Он отправляет специально сформированные запросы, чтобы выяснить, уязвим ли тот или иной сервер. При этом атаки возможны только в отношении NGINX-серверов с включенным PHP-FPM (программным пакетом для обработки скриптов на языке PHP).

Уязвимость найдена в конфигурации nginx, где проброс в PHP-FPM осуществляется c разделением частей URL при помощи fastcgi_split_path_info и определением переменной окружения PATH_INFO, но без предпроверки существования файла директивой try_files $fastcgi_script_name или конструкцией if (!-f $document_root$fastcgi_script_name).

image

«С помощью специально сформированного URL атакующий может добиться смещения указателя path_info на первый байт структуры _fcgi_data_seg. Запись нуля в этот байт приведет к перемещению указателя `char* pos` на ранее идущую область памяти, вызываемый следом FCGI_PUTENV перезаписывает некоторые данные (включая другие переменные ast cgi)», — так описана уязвимость. То есть, хакер может создать фиктивную переменную PHP_VALUE fcgi и добиться выполнения кода.

Для данной уязвимости уже выпустили патч. Пользователям рекомендовали обновиться до новейших версий PHP 7.3.11 и PHP 7.2.24. Для тех, кто не может обновиться, представлена инструкция с использованием стандартной утилиты брандмауэра.

Ранее сообщалось об обнаружении вредоносной программы Spidey Bot, которая использует легитимный клиент Discord для Windows как средство для шпионажа и кражи информации. Spidey Bot добавляет вредоносный JavaScript, который способен использовать команды Discord API, чтобы собирать данные о пользователе. Затем вся информация передается злоумышленнику через веб-хук Discord.

PhpStorm 2019.3: поддержка PHP 7.4, PSR-12, WSL, MongoDB

php strom released

Всем привет! Мы рады представить вам третий мажорный релиз PhpStorm в этом году!
Под катом — подробный разбор всех заметных изменений и новых возможностей. Осторожно — очень много картинок.

Скачать новую версию можно на сайте или с помощью Toolbox App. Как всегда, доступна 30-дневная пробная версия. Полную же версию могут использовать обладатели действующей подписки на PhpStorm или All Products pack, а также бесплатно — студенты и разработчики проектов с открытым исходным кодом.

Производительность и качество

В каждом релизе мы уделяем немало внимания улучшению производительности. Но в этот раз мы пошли еще дальше и устроили целый трехмесячный марафон по качеству, во время которого вся команда платформы IntelliJ была сосредоточена на шлифовке IDE с разных сторон. И вот чего удалось достичь:

  • IDE запускается быстрее
  • UI стал отзывчивее
  • Снизилось потребление памяти

Мы не планируем останавливаться на достигнутом и продолжим работу над уменьшением времени запуска и другими оптимизациями в следующих релизах.

PHP 7.4

PHP 7.4 уже вышел! И в нем очень много крутых фич. Мы начали выкатывать поддержку PHP 7.4 в предыдущем релизе, а в PhpStorm 2019.3 полностью поддерживаются все новые возможности языка.

Типизированные свойства

Это, пожалуй, самая ожидаемая фича PHP 7.4, и PhpStorm поддерживает ее начиная с версии 2019.2. Но давайте посмотрим еще разок, потому что мы поправили мелкие проблемы и покрыли некоторые пограничные случаи.
Конечно же, подсвечиваются все неправильные использования и несоответствия типов:

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

В любом случае, нажмите 

 Alt+Enter на свойстве, у которого нет типа, и в выпавшем списке выберите Add declared type for the field.

Стрелочные функции

Если у вас есть анонимные функции с однострочным телом, то в PHP 7.4 вы можете использовать для них синтаксис коротких лямбд: fn(parameter_list) => expr

При этом нет необходимости добавлять секцию use, потому что поддерживается автоматический биндинг по значению переменных из внешнего скоупа:

Нажмите 

 Alt+Enter на анонимной функции и выберите пункт Convert closure to arrow function, чтобы сконвертировать функцию автоматически:

Разделитель для числовых литералов

В PHP 7.4 можно вставлять символ подчеркивания в любом месте числа, чтобы визуально его отформатировать и улучшить читаемость кода.
Нажмите 

 Alt+Enter на любом числе и примените Add number separators. Это автоматически добавит символ ‘_‘ после каждого третьего знака в десятичных числах, или после каждого четвертого знака в шестнадцатеричных, двоичных и восьмеричных.

Вложенные тернарные операторы

Почти во всех языках программирования тернарный оператор считается справа налево. В PHP все было наоборот, что весьма неинтуитивно и могло приводить к ошибкам. В PHP 7.4 левая ассоциативность тернарного оператора больше не поддерживается. Это значит, что либо вы не используете вложенные тернарные выражения вообще, либо используете, но явно указываете порядок выполнения с помощью скобок.
PhpStorm 2019.3 подсветит устаревшее выражение, а вы можете уточнить, что имелось в виду, с помощью быстрого исправления (

 Alt+Enter – ну, вы уже в курсе, да?).

Новый механизм сериализации

Проблемы интерфейса Serializable в PHP исправить не представлялось возможным, поэтому было решено добавить два новых магических метода __serialize() и __unserialize(). PhpStorm поможет найти их использования в коде:

Ковариантные возвращаемые значения и контравариантные параметры

PHP 7.4 исправляет множество несоответствий, в частности, теперь позволяет «сужать» тип возвращаемого значения в наследниках и «расширять» тип параметров.

Устаревшие возможности

В PHP не только добавляют новые возможности, но и удаляют старые, делая язык более чистым и удобным для работы. И в PHP 7.4 есть целый ряд “депрекаций”.
PhpStorm 2019.3 подсвечивает те куски кода, которые требуют вашего внимания. Где возможно, предоставляется quick-fix (

 Alt+Enter) для исправления устаревшего выражения.

 C выходом PHP 7.4 старые версии PHP заброшены. PHP 7.2 будет еще в течение года получать только исправления безопасности, а PHP 7.1 теперь официально не поддерживается. Это значит, что если будет обнаружена уязвимость, то взлом вашего сервера – это лишь вопрос времени. Так что самое время обновиться.

PSR-12

Новый стандарт PSR-12 пришел на смену старому доброму PSR-2 и расширяет его правилами для новых фич языка, а также исправляет неточности. Спасибо PHP-FIG за отличный апдейт! Если вы использовали PSR-2, то посмотрите, что изменилось в PSR-12.

Стиль PSR-12 есть в PhpStorm 2019.3, и IDE сама предложит переключиться на него. Чтобы сделать это вручную, вызовите Set from… в разделе Preferences | Editor | Code Style | PHP:

Некоторые правила PSR-12 были реализованы в виде инспекций, которые отключены по умолчанию, но PhpStorm предложит их включить, когда вы выберете стиль PSR-12. Настроить инспекции под себя можно в Preferences | Editor | Inspections in PHP | Code Style | PSR-12:

После этого форматируйте код вручную нажатием Cmd/Ctrl+Alt+L:

Или делайте это автоматически перед коммитом с помощью опции Cleanup:

WSL

PhpStorm теперь поддерживает разработку в окружении WSL (Windows Subsystem for Linux), то есть когда вы запускаете IDE на Windows 10, целевая система разработки WSL/Linux. Вы можете указать удаленный PHP-интерпретатор из WSL и использовать его для запуска скриптов, тестов, команд Composer и отладки.
Чтобы начать, установите и настройте WSL по инструкции, а затем установите PHP, если он не идет в поставке в выбранном дистрибутиве Linux.
После этого можно добавить CLI интерпретатор через File | Settings | Languages & Frameworks | PHP.

Добавленный интерпретатор можно использовать для запуска тестов, Composer, или любой другой run-конфигурации.

Другие улучшения для PHP

Подсветка PHP в Markdown и строках
Иногда может потребоваться использовать PHP в строковом литерале. Надеюсь, все-таки не в eval(), но вы понимаете, о чем речь. Или, может быть, вы хотели бы видеть подсветку PHP во фрагментах кода в markdown-файлах.
Всё это доступно в PhpStorm 2019.3 благодаря специальному диалекту PHP, который называется InjectablePHP. Этот диалект работает так же? как и обычный PHP, но при этом не требует открывающихся тегов.
Он будет автоматически внедрен в markdown, если вы используете маркер php:

А также в строках Heredoc/Nowdoc, опять же с маркером PHP:

Ну, и в eval() это тоже работает автоматически:

Возможность выбрать интерпретатор PHP для тестовых run-конфигураций
Раньше требовалось создать отдельную run-конфигурацию для удаленных интерпретаторов. В PhpStorm 2019.3 мы добавили возможность указать интерпретатор для любых PHP run-конфигураций. Так что можно легко использовать для этого Docker, Vagrant, тот же WSL или любой другой вариант.

Выбор шрифта и цвета псевдопеременной $this

Улучшения PHPDoc
Традиционно PhpStorm предоставлял переходы по FQN и ссылкам в PHPDoc, но сам блок при этом отображался одним цветом как обычный комментарий.
В PhpStorm 2019.3 докблоки получили подсветку для типов, переменных, параметров, методов и свойств. Если в блоке встречается HTML, то его теги тоже подсвечиваются.

Мелкие полезности

Быстрые исправления для условных выражений
Выражения if-else, возможно, самые часто используемые конструкции языка. В PhpStorm 2019.3 мы добавили несколько быстрых исправлений 

 Alt+Enter для манипуляции ими.

Если внутри выражения if присутствует присваивание, то его можно быстро вынести на отдельную строку:

Если встретились вложенные условия if, то их можно объединить в одно:

Также можно объединить else с if внутри в один elseif:

Или наоборот – разделить elseif на else и if:

Рефакторинг Inline constant
Это действие противоположно Extract constant, то есть в результате выполнения все использования константы заменяются на ее значение. Для использования нажмите Cmd/Ctrl+Alt+N на константе.

Больше разных рефакторингов можно найти, нажав Cmd/Ctrl+T.

Удалить вызов функции
Нажмите Shift+Cmd/Ctrl+Delete, что удалить избыточный вызов функции:

Авто-вставка <?php при вводе <?

Автодополнение ‘=’ до ‘=>’ после ключа массива
Еще один маленький “таймсейвер” в 2019.3: когда вы добавляете элемент в массив, PhpStorm быстро допечатает =>, достаточно лишь нажать =:

HTTP-клиент

Панель инструментов в редакторе

В редакторе http- и rest-файлов появилась панель инструментов с быстрыми действиями:

Run All Requests in File

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

Сворачивание запросов

Если запрос большой, например вы отправляете форму с данными или в запросе много заголовков, то вам понравится возможность сворачивания запроса.
Варианты на выбор: свернуть весь запрос, оставив только первую строку, или свернуть только тело.

Автодополнение для хостов

Больше нет необходимости печатать хост в запросе, если вы его уже использовали где-то в проекте. PhpStorm предложит подходящий вариант в списке:

Динамические переменные

Мы добавили три динамических переменных, которые можно использовать в любом месте запроса:

  • $uuid – генерирует UUID-v4 (e9e87c05-82eb-4522-bc47-f0fcfdde4cab)
  • $timestamp – текущая временная метка в формате Unix (1563362218)
  • $randomInt – случайное число от 0 до 1000

Как обычно, для вставки переменных используйте двойные фигурные скобки:
GET http://httpbin.org/anything?id={{$uuid}}&ts={{$timestamp}}

Обо всех возможностях HTTP-клиента смотрите в видеоролике:

 HTTP Client in PhpStorm

Version Control

Переработанный интерфейс для получения проектов из VCS

В новом диалоге можно тут же залогиниться в GitHub, или, если вы уже залогинены, посмотреть список доступных репозиториев.

Checkout

Мы убрали опцию Checkout и разделили ее на две операции: New Branch from Selected и Checkout. New Branch from Selected создает новую ветку, но не устанавливает трекинг. А новый Checkout создает новую локальную ветку и устанавливает трекинг remote-ветки.

Push любой ветки

Теперь можно запушить любую ветку, не переключаясь на нее. В попапе VCS | Branches выберите ветку и используйте Push:

Настраиваемый формат даты

Теперь можно сконфигурировать формат даты, которая будет отображаться в VCS Annotate или в любых отображениях лога. Например, вы можете установить значение mm/dd/yyyyy, если хотите использовать формат США.

IDE

Улучшения в управлении плагинами

Для PhpStorm есть много крутых плагинов, но раньше управлять ими было не всегда удобно, потому что каждый раз после установки/удаления требовался перезапуск IDE. В PhpStorm 2019.3 на уровне инфраструктуры мы реализовали поддержку динамической установки плагинов. Это значит, что теперь есть возможность устанавливать и удалять плагины без перезапуска. Пока что это доступно только для тем и плагинов с картами горячих клавиш, но в следующих релизах мы планируем распространить это на большинство плагинов.

Контрастные полосы прокрутки

Полосы прокрутки теперь можно сделать более различимыми с помощью опции “Use contrast scrollbars” в Preferences | Appearance & Behavior | Appearance.

Гладкая прокрутка

Если включена опция Smooth scrolling в Preferences | Appearance & Behavior | Appearance, то прокрутка мышью или тачпадом во всем интерфейсе будет гладкой, а не построчной.

Поиск в выделенном тексте

Выделите кусок кода в редакторе и вызовите Find нажатием Cmd/Ctrl+F и поиск будет осуществляться только по выделенному тексту. Если нажать Cmd/Ctrl+Fещё раз, то поиск переключится на весь файл.

Новая команда для сортировки строк по алфавиту

Теперь можно легко отсортировать выбранные строки в редакторе вызвав Edit | Sort Lines из меню или командой Sort Lines в поиске по командам Find Actions по нажатию Cmd/Ctrl+Shift+A:

Больше разных действий со строками доступно в плагине String Manipulation.

Поддержка MongoDB

Наконец-то настал этот день, когда мы начали работу над поддержкой MongoDB.
Что, собственно, работает в этой версии:

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

Просмотр данных
Смотрите документы из любой коллекции или результаты запроса. Работает сортировка по колонкам, фильтры и пагинация.
Также можно включить режим отображения в виде дерева нажав на шестерёнку и дальше View as… | Tree.

Консоль запросов
Пока в консоли нет дополнения кода, но запускать запросы и просматривать результаты уже можно. Поставьте курсор на запросе и нажмите Cmd/Ctrl+Enter или на иконку Play в тулбаре.
Дополнение для запросов ожидается в следующих версиях.

PhpStorm включает в себя все возможности DataGrip из коробки, так что в инструментах БД еще очень много других нововведений. Скоро будет обзор релиза DataGrip 2019.3 от наших коллег.
Также, как всегда, PhpStorm включает в себя все обновления из WebStorm.
А полный список изменений можно найти в очень больших release notes.

И напоследок, короткий ролик (на английском) с демонстрацией главных фич релиза:

На этом все на этот раз. Спасибо, что дочитали до конца! Вопросы, пожелания, баг-репорты и просто мысли высказывайте в комментариях!

28 Nov 2019 PHP 7.4.0 Released!

php 7.4 вышел

The PHP development team announces the immediate availability of PHP 7.4.0. This release marks the fourth feature update to the PHP 7 series.

PHP 7.4.0 comes with numerous improvements and new features such as:

For source downloads of PHP 7.4.0 please visit our downloads page Windows binaries can be found on the PHP for Windows site. The list of changes is recorded in the ChangeLog.

The migration guide is available in the PHP Manual. Please consult it for the detailed list of new features and backward incompatible changes.

Many thanks to all the contributors and supporters!

PHP-News: декабрь 2019

php-news

Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.4, PhpStorm 2019.3, InfectionPHP и другие релизы, статистика версий PHP, об использовании FFI, видео с прошедших конференций и митапов, порция полезных инструментов, и многое другое.

Приятного чтения!

 Новости и релизы

 Инструменты

  • Infection 0.15.0 — Обновление инструмента для мутационного тестирования в PHP. В новой версии: Поддержка Codeception, PHP 7.4, Symfony 4.4 и 5.0, пара новых мутаторов и другое.
  • clue/phar-composer — Инструмент для создания phar-архива из любого проекта на основе Composer. Пост в поддержку.
  • phplrt/phplrt — Инструмент для создания парсеров на PHP по заданной грамматике. Пример: парсер json5.
  • shivammathur/setup-php — GitHub action для добавления в свой воркфлоу, который подготовит среду PHP для дальнейших шагов.
  • vlucas/phpdotenv V4.0 — Автоматическая загрузка переменных окружения из файла .env.
  • totten/pogo — Инструмент позволяет писать однофайловые скрипты, указывая Composer-зависимости непосредственно в PHP-файле. Идея уже была реализована в sensiolabs/melody.
  • PHPStan 0.12 — Статический анализатор для PHP в новой версии с поддержкой дженериков через PHPDoc аннотации.

 Symfony

 Laravel

 Yii

 Zend

  • Новости о Laminas — Проект Apigility будет переименован в Laminas API Tools (неймспейс Laminas\ApiTools), а Expressive будет называться Mezzio. Официальный релиз Laminas запланирован на январь 2020.

Async PHP

 Материалы для обучения

 Аудио/Видео

 Занимательное

Спасибо за внимание!

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

MySQL 8

mysql 8

Первое, что сразу бросается в глаза — пропускаются версии 6 и 7. Да, изменится нумерация релизов, это уже входит в моду (nodejs, php, …). Но и у разработчиков из Oracle конечно же тоже были на это свои причины.

Закат MyISAM

Все системные таблицы уже переведены на InnoDB. Также представлены изменения, которые накладывают ограничения на использование MyISAM в новой версии — например нельзя просто взять и скопировать MyISAM таблицы на запущенный MySQL сервер, они не будут распознаны. В InnoDB уже реализовали все фичи, которые считались преимуществами MyISAM, и из последних осталось лишь то, что таблицы MyISAM заимают меньше места на диске и запросы count(*) отрабатывают намного быстрее. К тому же InnoDB получил целый ряд новых возможностей, например настройка innodb_dedicated_server, которая позволяет автоматически устанавливать значения для innodb_buffer_pool_sizeinnodb_log_file_size и innodb_flush_method в зависимости от памяти на сервере.

Улучшения словаря данных

MySQL Server теперь включает транзакционный словарь данных, который хранит информацию о объектах базы данных. В предыдущих версиях MySQL данные словаря хранились в файлах метаданных и в непереходных таблицах. Подробней об изменениях в словаре данных можно почитать здесь.

Улучшения JSON функционала

Все мы помним про новый функционал для работы с JSON в MySQL которые появились в версии 5.7 (Испытываем новые JSON возможности в MySQL 5.7 и Использование JSON в MySQL). В восьмой версии этот функционал значительно расширится. Например добавлен оператор ->>, который является эквивалентом вызова JSON_UNQUOTE() на результате JSON_EXTRACT(). Функции аггрегирования JSON_ARRAYAGG() и JSON_OBJECTAGG(), добавлена возможность частичного обновления JSON колонки (что эффективней чем полное удаление текущего значения и запись нового), добавлена возможность использования диапазонов в XPath выражениях, функция JSON_MERGE() и много другое.

Оптимизатор

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

Роли

Новая заманчивая возможность восьмой версии — теперь можно создавать свои роли и закреплять за ними нужные привилегии. Например

CREATE ROLE 'developer_role';
GRANT SELECT ON database.* TO 'developer_role';
GRANT 'developer_role' TO 'user'@'localhost';

Кодировка по умолчанию

Все знают, что в версиях 5.x кодировкой по умолчанию является latin1, однако начиная с версии 8.0.0 стандартной кодировкой будет utf8mb4. Теперь можно будет не переживать за сохранность emoji и других мультибайтовых символов.

И это далеко не все изменения, с полным списком вы можете ознакомиться на сайте продукта. И бесконечно радует то, что всем известный и всеми любимый продукт активно развивается и не растворился среди сотен других СУБД. Ну и напоследок объемная презентация, для тех кто лучше усваивает информацию в таком виде.