🔐 Баг-хантеры, будьте готовы: критическая уязвимость в RainLoop обнаружена!
Недавно один из участников программы Bug Bounty нашёл уязвимость в популярном, но устаревшем почтовом клиенте RainLoop. После быстрого реагирования, Beget принял решение отказаться от использования этого клиента и перевести всех пользователей на поддерживаемое решение.
💥 Как это произошло?
Исследователь, обнаружив уязвимость, нашёл путь для выполнения произвольных команд через уязвимость в функции десериализации. Вскоре стало понятно, что с помощью SSRF можно было бы легко обойти все защиты и получить доступ к конфиденциальным данным. В результате он получил доступ к важной информации пользователей компании, что подняло случай до уровня критической уязвимости.
🎉 Реакция Beget
Компания оперативно отреагировала на баг и даже назначила награду исследователю за его находку. Это подтверждает важность таких инициатив в сфере безопасности.
💡 Выводы
Этот случай ещё раз подтверждает, что старые, казалось бы, заброшенные проекты могут содержать серьёзные угрозы. Важно не останавливаться на достигнутом и постоянно проверять безопасность своих сервисов.
🔗 Хабр
Библиотека пхпшника
Недавно один из участников программы Bug Bounty нашёл уязвимость в популярном, но устаревшем почтовом клиенте RainLoop. После быстрого реагирования, Beget принял решение отказаться от использования этого клиента и перевести всех пользователей на поддерживаемое решение.
💥 Как это произошло?
Исследователь, обнаружив уязвимость, нашёл путь для выполнения произвольных команд через уязвимость в функции десериализации. Вскоре стало понятно, что с помощью SSRF можно было бы легко обойти все защиты и получить доступ к конфиденциальным данным. В результате он получил доступ к важной информации пользователей компании, что подняло случай до уровня критической уязвимости.
🎉 Реакция Beget
Компания оперативно отреагировала на баг и даже назначила награду исследователю за его находку. Это подтверждает важность таких инициатив в сфере безопасности.
💡 Выводы
Этот случай ещё раз подтверждает, что старые, казалось бы, заброшенные проекты могут содержать серьёзные угрозы. Важно не останавливаться на достигнутом и постоянно проверять безопасность своих сервисов.
🔗 Хабр
Библиотека пхпшника
❤1👍1
🧑💻 Что за ужас тут творится
Когда вы приходите в новый коллектив, легко заподозрить, что всё вокруг катится кувырком. Но возможно, вы ещё не разобрались во внутренних механизмах.
К нам пришёл подписчик с вопросом
На практике важно учитывать сразу несколько аспектов, чтобы не спешить с выводами:
— Обратите внимание на то, как принимаются решения: формально через руководителей или неформально «по знакомству».
— Оцените, насколько корректно используется трекинг задач и документация — это показатель зрелости команды.
— Внимательно слушайте, какие вопросы задают другие: открыты ли коллеги к диалогу или предпочитают «молча работать».
— Спросите про KPI и цели: ясны ли вам критерии успеха и пути их достижения?
Помните, никто не идеален: везде есть проблемы, просто о них не все говорят.
💬 С какими «тревожными звоночками» вы сталкивались в новых командах? Поделитесь в комментариях 👇
P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.
🐸 Библиотека пхпшника #междусобойчик
Когда вы приходите в новый коллектив, легко заподозрить, что всё вокруг катится кувырком. Но возможно, вы ещё не разобрались во внутренних механизмах.
К нам пришёл подписчик с вопросом
Как отличить реальные проблемы в компании от простого непонимания процессов и культуры?
На практике важно учитывать сразу несколько аспектов, чтобы не спешить с выводами:
— Обратите внимание на то, как принимаются решения: формально через руководителей или неформально «по знакомству».
— Оцените, насколько корректно используется трекинг задач и документация — это показатель зрелости команды.
— Внимательно слушайте, какие вопросы задают другие: открыты ли коллеги к диалогу или предпочитают «молча работать».
— Спросите про KPI и цели: ясны ли вам критерии успеха и пути их достижения?
Помните, никто не идеален: везде есть проблемы, просто о них не все говорят.
💬 С какими «тревожными звоночками» вы сталкивались в новых командах? Поделитесь в комментариях 👇
P.S. Если хотите задать вопрос сообществу или поделиться историей, заполните нашу гугл-форму.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Dead code detector
Библиотека для обнаружения неиспользуемого кода с помощью расширения PHPStan. Обнаруживает мертвые циклы, поддерживает такие библиотеки, как Symfony, Doctrine, PHPUnit и др. Может автоматически удалять неиспользуемый PHP-код.
Легко установить через:
🔗 Github
Библиотека пхпшника #инструменты
Библиотека для обнаружения неиспользуемого кода с помощью расширения PHPStan. Обнаруживает мертвые циклы, поддерживает такие библиотеки, как Symfony, Doctrine, PHPUnit и др. Может автоматически удалять неиспользуемый PHP-код.
Легко установить через:
composer require --dev shipmonk/dead-code-detector
🔗 Github
Библиотека пхпшника #инструменты
💯4
Forwarded from Библиотека задач по PHP | тесты, код, задания
Чтобы подтвердить адрес электронной почты, какой флаг должен быть передан функции filter_var()?
Anonymous Quiz
14%
FILTER_VALIDATE_MAIL
17%
VALIDATE_EMAIL
63%
FILTER_VALIDATE_EMAIL
5%
VALIDATE_MAIL
How to: миграция больших баз данных в Laravel
Статья описывает стратегию миграции больших баз данных в Laravel без простоя и с минимальным риском ошибок, подходящую для высоконагруженных приложений. Основная цель — избежать блокировок таблиц, сбоев и ошибок во время трафика, что критично для таких систем, как электронная коммерция или банковские приложения.
Основная стратегия — это метод «Double Write + Backfill», который включает несколько шагов:
1. Добавление новых колонок или таблиц без удаления старых, чтобы данные продолжали работать.
2. Реализация логики «двойной записи»: во время обновлений и вставок данных записываются в обе колонки (старую и новую).
3. Заполнение новых данных с помощью команд Artisan для миграции существующих записей.
4. Подготовка плана отката на случай ошибок.
5. Переход на новую структуру после завершения миграции и перехода всех данных.
🔗 Medium
Библиотека пхпшника
Статья описывает стратегию миграции больших баз данных в Laravel без простоя и с минимальным риском ошибок, подходящую для высоконагруженных приложений. Основная цель — избежать блокировок таблиц, сбоев и ошибок во время трафика, что критично для таких систем, как электронная коммерция или банковские приложения.
Основная стратегия — это метод «Double Write + Backfill», который включает несколько шагов:
1. Добавление новых колонок или таблиц без удаления старых, чтобы данные продолжали работать.
2. Реализация логики «двойной записи»: во время обновлений и вставок данных записываются в обе колонки (старую и новую).
3. Заполнение новых данных с помощью команд Artisan для миграции существующих записей.
4. Подготовка плана отката на случай ошибок.
5. Переход на новую структуру после завершения миграции и перехода всех данных.
🔗 Medium
Библиотека пхпшника
❤4
Последний шанс залутать курсы Proglib Academy с выгодой 40% и пожизненным доступом.
До 1 августа действует скидка на курсы по математике для Data Science, алгоритмам и структурам данных, обновлённому Python, frontend-разработке с нуля, основам IT для непрограммистов, базовым моделям ML, а также архитектурам и шаблонам проектирования.
Выбираем и забираем 👈
P.S. Акция не распространяется на курсы «AI-агенты для DS-специалистов» и «ML для старта в Data Science».
До 1 августа действует скидка на курсы по математике для Data Science, алгоритмам и структурам данных, обновлённому Python, frontend-разработке с нуля, основам IT для непрограммистов, базовым моделям ML, а также архитектурам и шаблонам проектирования.
Выбираем и забираем 👈
P.S. Акция не распространяется на курсы «AI-агенты для DS-специалистов» и «ML для старта в Data Science».
🥱2❤1👏1😁1
В PHP 8.5 появится опция INI Diff
Статья объясняет, как в PHP 8.5 с помощью опции
🔗 Читать статью
Библиотека пхпшника
Статья объясняет, как в PHP 8.5 с помощью опции
--ini=diff
можно легко выявить изменения в INI-конфигурации, которые отличаются от стандартных значений. Эта возможность полезна для отслеживания изменений в конфигурации PHP без необходимости вручную сравнивать текущие значения с настройками по умолчанию. Пример показан на Docker-контейнере с PHP 8.5, где можно увидеть, как изменения INI-файлов, например, в настройке memory_limit
, отображаются при запуске контейнера. В статье также приводятся шаги для создания Docker-образа, который позволяет экспериментировать с этими новыми функциями.🔗 Читать статью
Библиотека пхпшника
👍17🔥7❤2
🧪 Команда дня: Запуск тестов только одного файла
📌 Команда:
Где
🔍 Зачем это нужно?
При разработке или рефакторинге кода часто возникает необходимость быстро проверить работу конкретного теста или группы тестов. Запуск всех тестов может занять много времени, особенно в больших проектах. Используя команду выше, вы можете выполнить только нужный файл тестов, что ускоряет процесс разработки и отладки.
📝 Пример:
Предположим, у вас есть файл с тестами
Это выполнит все тесты, определённые в классе
⚙️ Дополнительные опции:
Запуск конкретного метода теста:
Если вы хотите выполнить только один метод теста из класса, используйте параметр
Замените
Использование регулярных выражений:
Параметр
Это полезно, если вы хотите выполнить группу тестов, соответствующих определённому шаблону.
💡 Советы:
Проверка синтаксиса перед запуском:
Перед выполнением тестов рекомендуется проверить синтаксис PHP-файла:
Это поможет избежать ошибок при запуске тестов.
Использование в CI/CD:
Если вы интегрируете тесты в систему непрерывной интеграции, убедитесь, что пути к тестовым файлам указаны корректно, и используйте соответствующие команды для запуска отдельных тестов или групп тестов.
📌 Команда:
phpunit путь/к/файлу/ТестКласс.php
Где
ТестКласс.php
— это файл с тестами, который вы хотите запустить.🔍 Зачем это нужно?
При разработке или рефакторинге кода часто возникает необходимость быстро проверить работу конкретного теста или группы тестов. Запуск всех тестов может занять много времени, особенно в больших проектах. Используя команду выше, вы можете выполнить только нужный файл тестов, что ускоряет процесс разработки и отладки.
📝 Пример:
Предположим, у вас есть файл с тестами
UserTest.php
в директории tests/Feature/
. Чтобы запустить только этот файл, выполните:phpunit tests/Feature/UserTest.php
Это выполнит все тесты, определённые в классе
UserTest
, и выведет результаты в консоль.⚙️ Дополнительные опции:
Запуск конкретного метода теста:
Если вы хотите выполнить только один метод теста из класса, используйте параметр
--filter
с указанием имени метода:phpunit --filter testMethodName путь/к/файлу/ТестКласс.php
Замените
testMethodName
на имя метода, который вы хотите запустить.Использование регулярных выражений:
Параметр
--filter
поддерживает регулярные выражения. Например, чтобы запустить все методы, начинающиеся с testUser
, используйте:phpunit --filter '/^testUser/' путь/к/файлу/ТестКласс.php
Это полезно, если вы хотите выполнить группу тестов, соответствующих определённому шаблону.
💡 Советы:
Проверка синтаксиса перед запуском:
Перед выполнением тестов рекомендуется проверить синтаксис PHP-файла:
php -l путь/к/файлу/ТестКласс.php
Это поможет избежать ошибок при запуске тестов.
Использование в CI/CD:
Если вы интегрируете тесты в систему непрерывной интеграции, убедитесь, что пути к тестовым файлам указаны корректно, и используйте соответствующие команды для запуска отдельных тестов или групп тестов.
🥱7❤1
🚀 Pipe operator в PHP 8.5 — меньше вложенности, больше читаемости
PHP 8.5 завез мощную штуку — оператор пайпа (|>), и это реально меняет стиль кода.
Раньше:
Или ещё хуже — с кучей временных переменных:
Теперь:
Каждая операция читается как шаг рецепта — слева направо. Код становится декларативным, не запутанным и без временных переменных.
🎯 Реальный пример: обработка email'а из формы
🔥 Минимум шума, максимум сути.
Pipe — мелкая синтаксическая штука, но она делает код ближе к тому, как вы мыслите.
С PHP 8.5 пишем как люди.
🐸 Библиотека пхпшника
PHP 8.5 завез мощную штуку — оператор пайпа (|>), и это реально меняет стиль кода.
Раньше:
$result = trim(str_shuffle(strtoupper("Hello World")));
Или ещё хуже — с кучей временных переменных:
$result = "Hello World";
$result = strtoupper($result);
$result = str_shuffle($result);
$result = trim($result);
Теперь:
$result = strtoupper("Hello World")
|> str_shuffle(...)
|> trim(...);
Каждая операция читается как шаг рецепта — слева направо. Код становится декларативным, не запутанным и без временных переменных.
🎯 Реальный пример: обработка email'а из формы
$result = $_REQUEST['email']
|> fn($e) => strtolower($e)
|> fn($e) => filter_var($e, FILTER_VALIDATE_EMAIL)
|> fn($e) => sendEmail($e, "Welcome!");
echo $result ? "Sent!" : "Error";
🔥 Минимум шума, максимум сути.
Pipe — мелкая синтаксическая штука, но она делает код ближе к тому, как вы мыслите.
С PHP 8.5 пишем как люди.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37🤔10🔥8😢7😍1
💡 Чего мы ждём от обновлений
PHP активно развивается и курс этого развития зависит от сообщества. Давайте поделимся какие фичи ждём в следующем обновлении.
Например:
🐸 Библиотека пхпшника #междусобойчик
PHP активно развивается и курс этого развития зависит от сообщества. Давайте поделимся какие фичи ждём в следующем обновлении.
Например:
Асинхронность на уровне ядра: встроенная поддержка async/await упростит написание многозадачного кода.
Расширенный стандарт утилит: Больше array_*, инструменты инспекции, удобная дебага
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Библиотека программиста | программирование, кодинг, разработка
🐕🦺 Пет-проекты в резюме: как превратить фриланс и side-проекты в карьерный козырь
💻 Пилишь бота, калькулятор, парсер…
А потом открываешь резюме — и внезапно показать нечего. На самом деле твой неформальный опыт — это не «поигрался с кодом», а боевая прокачка. Главное — правильно оформить:
🛠 Пет-проекты, в которые ты вложил душу — это не хобби, это MVP
🕵️ Side-проекты — это не «с друзьями запускали что-то», а «работал в кросс-функциональной команде»
💸 Фриланс через брата жены — это тоже фриланс (и почти стартап)
⚡️ В статье:
— как вписать неформальный опыт в резюме без ощущения, что ты его придумываешь на ходу;
— как не испортить впечатление фразой «проект недоделан, но идея крутая»;
— как показать, что ты не просто что-то писал — ты решал задачи.
В общем, если твой гитхаб похож на кладбище хороших идей — пора его оцифровать в карьерный актив🧠
🔗 Читать статью
🐸 Библиотека программиста
💻 Пилишь бота, калькулятор, парсер…
А потом открываешь резюме — и внезапно показать нечего. На самом деле твой неформальный опыт — это не «поигрался с кодом», а боевая прокачка. Главное — правильно оформить:
🛠 Пет-проекты, в которые ты вложил душу — это не хобби, это MVP
🕵️ Side-проекты — это не «с друзьями запускали что-то», а «работал в кросс-функциональной команде»
💸 Фриланс через брата жены — это тоже фриланс (и почти стартап)
⚡️ В статье:
— как вписать неформальный опыт в резюме без ощущения, что ты его придумываешь на ходу;
— как не испортить впечатление фразой «проект недоделан, но идея крутая»;
— как показать, что ты не просто что-то писал — ты решал задачи.
В общем, если твой гитхаб похож на кладбище хороших идей — пора его оцифровать в карьерный актив
Please open Telegram to view this post
VIEW IN TELEGRAM
«Что дал переход на zsh мне, как разработчику?»
Когда-то многие из нас просто писали команды в bash и не задумывались. Но однажды в команде сказали: «Ставь zsh — будет лучше». Почему? Аргументов не дали. Сегодня восполняем этот пробел — и особенно это будет полезно PHP-разработчикам.
🖥️Что такое Zsh?
Это оболочка, как и bash, только... мощнее. Благодаря плагинам, темам и расширениям zsh превращает ваш терминал в полноценный dev-инструмент. А если установить
— автокомплит команд по истории (как в IDE)
— подсветка синтаксиса прямо в консоли
— алиасы:
— темы вроде powerlevel10k: кастомизация отображения веток, путей, статуса команд
А главное — вся эта магия работает из коробки, стоит лишь включить нужные плагины и чуть поднастроить
👉 Хабр
Когда-то многие из нас просто писали команды в bash и не задумывались. Но однажды в команде сказали: «Ставь zsh — будет лучше». Почему? Аргументов не дали. Сегодня восполняем этот пробел — и особенно это будет полезно PHP-разработчикам.
🖥️Что такое Zsh?
Это оболочка, как и bash, только... мощнее. Благодаря плагинам, темам и расширениям zsh превращает ваш терминал в полноценный dev-инструмент. А если установить
Oh My Zsh
, становится еще проще:— автокомплит команд по истории (как в IDE)
— подсветка синтаксиса прямо в консоли
— алиасы:
gl
вместо git pull
, ci
вместо composer install
, и так далее— темы вроде powerlevel10k: кастомизация отображения веток, путей, статуса команд
А главное — вся эта магия работает из коробки, стоит лишь включить нужные плагины и чуть поднастроить
.zshrc
.👉 Хабр
❤1
🌗 Айтишный культ темной темы в IDE
Темная тема давно стала визуальной нормой для нас — кто-то включил один раз и больше не возвращался. А кто-то сидит на светлой и не видит смысла менять.
➖ За темную:
— Не слепит в темноте
— Глаза устают меньше
— Просто красиво
➖ За светлую:
— Лучше читается при дневном свете
— Меньше проблем с контрастом
— Привычнее для документации и веба
❓ А какой темой пользуетесь вы? Делитесь в коммментариях!
🐸 Библиотека пхпшника #междусобойчик
Темная тема давно стала визуальной нормой для нас — кто-то включил один раз и больше не возвращался. А кто-то сидит на светлой и не видит смысла менять.
— Не слепит в темноте
— Глаза устают меньше
— Просто красиво
— Лучше читается при дневном свете
— Меньше проблем с контрастом
— Привычнее для документации и веба
Please open Telegram to view this post
VIEW IN TELEGRAM
1🌚28❤2🤩2
💻 Подборка новостей по PHP за неделю:
🔹 Laravel 12.21 — появились атрибуты
🔹 Symfony 21–27 июля — активная подготовка к релизам Symfony 7.4 и 8.0: добавлен
🔹 PHP 8.5.0 Alpha 2 — вышла вторая альфа-версия, приглашают к тестированию.
🔹 Livewire уязвимость (CVE-2025-54068) — версии до 3.6.3 уязвимы к удалённому выполнению команд через обновление свойств компонента. Обновитесь немедленно.
🔹 Symfony AI — новые компоненты для интеграции AI в PHP-приложения, от низкоуровневых библиотек до бандлов.
Библиотека пхпшника #свежак
🔹 Laravel 12.21 — появились атрибуты
Singleton
и Scoped
для контейнера, метод query builder для проверки значений между двумя колонками, строгая валидация чисел и булевых значений.🔹 Symfony 21–27 июля — активная подготовка к релизам Symfony 7.4 и 8.0: добавлен
ObjectMapperAwareInterface
, улучшены JsonStreamer
и AssetMapper
, удалены устаревшие фичи, включая автоматическое отображение Doctrine entity.🔹 PHP 8.5.0 Alpha 2 — вышла вторая альфа-версия, приглашают к тестированию.
🔹 Livewire уязвимость (CVE-2025-54068) — версии до 3.6.3 уязвимы к удалённому выполнению команд через обновление свойств компонента. Обновитесь немедленно.
🔹 Symfony AI — новые компоненты для интеграции AI в PHP-приложения, от низкоуровневых библиотек до бандлов.
Библиотека пхпшника #свежак
🔥3🥰1
Forwarded from Библиотека задач по PHP | тесты, код, задания
Какие из реализаций метода getName() не валидны в классе Child?
Forwarded from Библиотека задач по PHP | тесты, код, задания
Какие из реализаций метода getName() не валидны в классе Child?
Anonymous Quiz
10%
protected function getName(){}
21%
function getName(){}
38%
private function getName(){}
31%
public function getName(){}
❤5
⌨️ Топ-вакансий по PHP за неделю
Backend-разработчик — от 1 800 до 3 100 $ удалёнка (Москва)
Backend Developer (PHP) Middle — 180 000 — 300 000 ₽, удалёнка (Москва)
PHP-разработчик — от 2 500 до 3 000 $, Удалёнка (Москва)
PHP Developer (Symfony) — от 250 000 ₽, Удалёнка (Москва)
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
Backend-разработчик — от 1 800 до 3 100 $ удалёнка (Москва)
Backend Developer (PHP) Middle — 180 000 — 300 000 ₽, удалёнка (Москва)
PHP-разработчик — от 2 500 до 3 000 $, Удалёнка (Москва)
PHP Developer (Symfony) — от 250 000 ₽, Удалёнка (Москва)
➡️ Еще больше топовых вакансий — в нашем канале PHP Jobs
👏1