Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.3K subscribers
1.33K photos
21 videos
26 files
4.03K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
Download Telegram
Что такое Path Traversal?

Path Traversal в PHP — это уязвимость безопасности, при которой злоумышленник может попытаться получить доступ к файлам или директориям за пределами предназначенной области. Это может произойти, если приложение неправильно обрабатывает пользовательский ввод в пути файлов.

Например, если веб-приложение позволяет пользователю вводить путь к файлу или директории и не достаточно проверяет и фильтрует этот ввод, злоумышленник может использовать специально сформированные строки для «перехода» за пределы заданной директории и, таким образом, получить доступ к конфиденциальным файлам на сервере.

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

#вопросы_с_собеседований
👍5🥱31😁1
Выбор библиотеки PHP на основе производительности

Здесь обсуждается выбор библиотек для распознавания веб-сканеров (краулеров) в PHP с акцентом на их производительность в приложении Shopware. Рассматриваются три варианта: встроенная функция PHP get_browser, а также специализированные библиотеки jaybizzle/crawler-detect и matomo/device-detector.

Для тестирования скорости этих решений был написан код, который проверяет около 2700 пользовательских агентов. Инструмент профилирования Tideways помог определить производительность каждой библиотеки. Результаты показали, что функция get_browser работает значительно медленнее, чем сторонние библиотеки, и не подходит для реальных запросов.

Обе специализированные библиотеки показали схожую производительность с разницей в 12%: crawler-detect выполнилась за 767 мс, а device-detector — за 685 мс. Однако, при тестировании на одиночных запросах (один HTTP-заголовок), matomo/device-detector оказалась в 10 раз медленнее из-за инициализации регулярных выражений, что добавляет около 18 мс к каждому запросу. В то же время jaybizzle/crawler-detect генерирует регулярные выражения на этапе сборки, что позволяет обрабатывать запросы быстрее.

В итоге, для задачи определения краулера по одному запросу лучше подходит библиотека jaybizzle/crawler-detect с задержкой в 2 мс. matomo/device-detector, несмотря на её относительную медлительность в данном случае, может быть полезной для анализа большого количества запросов в фоновом режиме, где скорость работы с одиночными запросами не столь критична.
👍4🥰1🌚1
19 важных советов по оптимизации производительности Laravel

В этой статье рассмотрятся 19 советов, которые могут значительно повысить производительность вашего приложения Laravel
🥱5🌚4👍2
#дайджест #phpdevjob

Вакансии PHP разработчиков уровня Junior

▪️Backend разработчик
Москва. Д-проджект — веб разработка и сопровождение
Подробнее

▪️PHP-программист
Новосибирск. Intelsib — поисковое продвижение, контекстная реклама
Подробнее

Вакансии PHP разработчиков уровня Middle

▪️Fullstack разработчик
Казань. Майхит — управление отопительными котлами и инженерным оборудованием
Подробнее

▪️PHP developer
Удаленка. ТВИЛ СОФТ — разработка ПО
Подробнее

Вакансии PHP разработчиков уровня Senior

▪️PHP-developer
Екатеринбург. МЕДИАТЕН — разработка ПО
Подробнее

▪️Web-программист
Москва. Элитс — интернет-бутик брендовой одежды
Подробнее

Понравились вакансии?
❤️ — да
🤔 — нет
🤔3👍21🎉1
#хочу_спросить

Задавайте любые вопросы о программировании и получайте ответы от пользователей. В комментариях под постом укажите #язык, #стек и/или #библиотеку, по которым задаете вопрос.
1👍1
Что такое хэш-функция и где она используется?

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

Основные характеристики хэш-функций:

Фиксированная длина вывода: Хэш-функции возвращают хэш с постоянной длиной, независимо от размера входных данных.

Эффективность: Для любых входных данных вычисление хэш-функции должно быть быстрым.

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

В PHP существует множество хэш-функций, таких как MD5, SHA-1, SHA-256, SHA-512 и др. Они широко используются в различных областях программирования:

1️⃣Хранение паролей: Хэш-функции часто используются для хранения паролей пользователей в базах данных. Вместо хранения самих паролей, системы хранят их хэши. При проверке пароля введенного пользователем, система хэширует введенный пароль и сравнивает его с сохраненным хэшем.

2️⃣Цифровые подписи и проверка целостности данных: Хэш-функции используются для создания цифровых подписей и проверки целостности данных. Например, в криптографических протоколах, таких как HMAC (Hash-based Message Authentication Code).

3️⃣Контроль целостности файлов: Хэш-функции позволяют проверить, не были ли изменены файлы. Путем сохранения хэшей файлов и их сравнения в последующем, можно обнаружить любые изменения.

4️⃣Хэширование данных в хранилищах и поисковых индексах: Хэш-функции используются для быстрого поиска и сравнения данных, таких как в хэш-таблицах.

Важно отметить, что для хэширования паролей в PHP рекомендуется использовать функцию password_hash(), которая обеспечивает дополнительные меры безопасности. Избегайте использования устаревших хэш-функций, таких как MD5 и SHA-1, в критических сценариях, так как они считаются небезопасными.

#вопросы_с_собеседований
1👍12😁1
Высокочастотные метрики в PHP с TCP-сокетами

Здесь описывается решение для высокочастотного логирования в среде с большим количеством запросов на сервере, использующем PHP. В статье объясняется, как отслеживать метрики производительности, такие как API и запросы к базе данных, с минимальным влиянием на работу системы.

Структура логирования: Приводится стандартизированная запись логов, где указывается название метрики, тип, значение и продолжительность выполнения.

Примеры логирования:

🔸API-запросы.
🔸SQL-запросы.
🔸Логирование файла и строки вызова через debug_backtrace.

Логирование через TCP сокет:
Предпочтительно отправлять логи напрямую в агрегатор через TCP-сокет, а не сохранять их. Используется формат NDJSON для передачи данных, а метрики агрегируются с помощью инструментов, таких как Prometheus.

Минимизация нагрузки: Описаны методы минимизации влияния логирования на систему:

✔️Логирование должно потреблять минимальные ресурсы (RAM, CPU, диск, сеть).
✔️Логирование можно включать/выключать без перезагрузки сервера.
✔️Логирование должно корректно работать даже в случае недоступности сервера для логов.

Метод обработки трех возможных состояний TCP-порта: Порт может быть открыт, закрыт или заблокирован брандмауэром, и система должна обрабатывать эти случаи без блокировки приложения.
👍21
⭐️ Вы можете использовать readStream и writeStream, чтобы скопировать файл (или все файлы из папки) с одного диска на другой, сохраняя низкое использование памяти.
👍6👾1
Привет, друзья! 👋

Мы хотим обсудить важную тему — токсичность в среде разработчиков и значимость поддержки и наставничества. Нам интересно узнать ваше мнение и опыт! Поделитесь своими мыслями, и самые полезные советы мы включим в нашу статью. Вот несколько вопросов для вас:

🤔 Приходилось ли вам сталкиваться с токсичными коллегами на работе? Как вы справлялись с этой ситуацией?
🌟 Какие качества вы считаете важными для хорошего наставника в IT-сфере?
💡 Какие советы вы бы дали тем, кто хочет создать более поддерживающую и позитивную рабочую атмосферу?
Спасибо за ваше участие! Ваши ответы помогут сделать рабочую среду лучше для всех. 🚀
1
⚙️ Подпишись на нашу еженедельную email-рассылку, чтобы быть в курсе последних открытий и тенденций в мире бэкенда.

В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования

👉Подписаться👈
👍1
💡 Зачем использовать distributed lock: на заметку разработчику

Распределённая блокировка (distributed locking) — это метод координации доступа к общим ресурсам между несколькими процессами или узлами в распределённой системе.

👉 Источник
#дайджест новостей по PHP за неделю:

🔎PHP 8.4.0 RC 1 теперь доступен для тестирования — Команда PHP рада объявить о выпуске PHP 8.4.0, RC 1. Это первый релиз-кандидат, продолжающий цикл выпуска PHP 8.4, примерный план которого указан в PHP Wiki.

🔎Выпущены PHP 8.1.30, PHP 8.2.24 и PHP 8.3.12 — Команда разработчиков PHP объявляет о скором выходе PHP 8.1.30, PHP 8.2.24 и PHP 8.3.12. Это релиз безопасности.

🔎Laravel MongoDB выпускает версию 5.0

🔎Выпущен CakePHP 4.5.7 — Улучшения: Добавлены аннотации для mixin и template в классы Association. Исправление того, что BehaviorRegistry::unload() не отсоединял методы camelCase.

🔎Неделя Symfony #926 (23-29 сентября 2024 года) — На этой неделе в грядущей версии Symfony 7.2 были добавлены такие новые возможности, как поддержка определения доверенных хостов и заголовков с помощью env vars, улучшение команды debug:asset-mapper для поиска и фильтрации активов, а также разрешение парсерам запросов возвращать несколько RemoteEvent в веб-хуках.
👍2
Лучшие практики структурирования веб-проектов на PHP

Статья описывает основные правила и рекомендации, которые следует учитывать при планировании нового веб-проекта на PHP, чтобы обеспечить его успешное выполнение.

Определение целей и требований проекта — важно четко определить задачи и ожидания для предотвращения «раздувания» проекта и соблюдения сроков.

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

Продуманное проектирование структуры базы данных — правильная схема базы данных обеспечивает эффективное управление данными.

Планирование безопасности с самого начала — защита проекта от уязвимостей, таких как SQL-инъекции и утечки данных, обязательна для безопасности пользователей и проекта.

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

Оптимизация производительности на ранних этапах — улучшение скорости загрузки и производительности через использование кэша, оптимизацию запросов SQL и других техник.

Использование системы контроля версий и автоматизированного развертывания — это помогает в совместной работе над проектом, отслеживании ошибок и быстром выпуске обновлений.
👍3
PHP и работа с базами данных: как выбрать и использовать ORM для максимальной производительности

ORM (Object-Relational Mapping) — это технология, которая связывает реляционные базы данных с объектно-ориентированными языками программирования. ORM упрощает сохранение и извлечение данных, автоматизируя преобразование между объектами и таблицами баз данных. В основе ORM лежит соответствие таблиц и их полей классам и свойствам объектов.

Примеры популярных ORM-библиотек для PHP включают Doctrine, Eloquent и Propel. Каждая библиотека имеет свои особенности: Doctrine поддерживает гибкие форматы отображения и транзакции, Eloquent ориентирован на удобство использования в Laravel, а Propel фокусируется на производительности.

Статья также рассматривает два шаблона проектирования ORM: Active Record (модель тесно связана с записью в БД) и Data Mapper (модель не связана с местом сохранения данных). Выбор между ними зависит от сложности проекта и требований к архитектуре.
1👍1😁1🥱1