Какой подход следует применить во время тестирования кода, который имеет внешние зависимости?
Один из подходов, который может быть применен во время тестирования кода с внешними зависимостями, — это использование моков или заглушек (mocks или stubs).
Использование моков и заглушек позволяет изолировать код от внешних зависимостей и создавать контролируемые ситуации для тестирования. Это значительно упрощает написание тестовых сценариев и позволяет проверить правильность работы кода без необходимости подключения к реальным сервисам или захвата ресурсов. Они также позволяют создавать тестовые сценарии, которые воспроизводят различные сценарии, которые могут быть сложными или невозможными в реальной системе.
#вопросы_с_собеседований
Один из подходов, который может быть применен во время тестирования кода с внешними зависимостями, — это использование моков или заглушек (mocks или stubs).
Использование моков и заглушек позволяет изолировать код от внешних зависимостей и создавать контролируемые ситуации для тестирования. Это значительно упрощает написание тестовых сценариев и позволяет проверить правильность работы кода без необходимости подключения к реальным сервисам или захвата ресурсов. Они также позволяют создавать тестовые сценарии, которые воспроизводят различные сценарии, которые могут быть сложными или невозможными в реальной системе.
#вопросы_с_собеседований
👍4
Как промежуточное ПО TrimStrings в Laravel может вызывать проблемы
Что такое TrimStrings Middleware и для чего оно нужно?
TrimStrings — это middleware в Laravel, которое автоматически удаляет пробелы в начале и в конце строк данных, поступающих в запросах. Например, если пользователь вводит в форму " [email protected] " с пробелами, middleware уберёт эти пробелы и передаст чистую строку «[email protected]». Это помогает избежать ошибок, вызванных лишними пробелами.
Что произошло?
При интеграции с бразильским платёжным провайдером возникла необходимость валидации данных о транзакциях, поступающих на сервер через POST-запрос. Для проверки подлинности данных выполняется хэширование строки с использованием алгоритма SHA256 и секретного ключа. Однако в процессе проверки некоторые корректные запросы отклонялись.
Анализ логов Nginx показал, что в параметре full_name от провайдера сохранялись конечные пробелы, которые на сервере обрезались TrimStrings middleware. Это приводило к несоответствию хэшей и отклонению запросов.
Как решить проблему?
Для предотвращения подобных ситуаций нужно отключить TrimStrings middleware для определённых маршрутов. В Laravel 8 для этого появился метод TrimStrings::skipWhen.
Что такое TrimStrings Middleware и для чего оно нужно?
TrimStrings — это middleware в Laravel, которое автоматически удаляет пробелы в начале и в конце строк данных, поступающих в запросах. Например, если пользователь вводит в форму " [email protected] " с пробелами, middleware уберёт эти пробелы и передаст чистую строку «[email protected]». Это помогает избежать ошибок, вызванных лишними пробелами.
Что произошло?
При интеграции с бразильским платёжным провайдером возникла необходимость валидации данных о транзакциях, поступающих на сервер через POST-запрос. Для проверки подлинности данных выполняется хэширование строки с использованием алгоритма SHA256 и секретного ключа. Однако в процессе проверки некоторые корректные запросы отклонялись.
Анализ логов Nginx показал, что в параметре full_name от провайдера сохранялись конечные пробелы, которые на сервере обрезались TrimStrings middleware. Это приводило к несоответствию хэшей и отклонению запросов.
Как решить проблему?
Для предотвращения подобных ситуаций нужно отключить TrimStrings middleware для определённых маршрутов. В Laravel 8 для этого появился метод TrimStrings::skipWhen.
DEV Community
How Laravel's TrimStrings Middleware Can Cause Issues
Laravel is a popular framework in the PHP world, offering developers great tools to simplify their...
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
🎉1
Действительно ли класс DateTime в PHP настолько плох?
Здесь мы рассмотрим плюсы и минусы класса DateTime, важность неизменяемости и то, как эффективно использовать класс DateTime, проанализируем причины и последствия, стоящие за этими проблемами.
Здесь мы рассмотрим плюсы и минусы класса DateTime, важность неизменяемости и то, как эффективно использовать класс DateTime, проанализируем причины и последствия, стоящие за этими проблемами.
DEV Community
Is PHP’s DateTime Class Really That Bad?
In the PHP developer community, the DateTime class has long been a topic of controversy. For many...
🎉2👍1
Forwarded from PHP jobs — вакансии по PHP, Symfony, Laravel
#дайджест #phpdevjob
Вакансии PHP разработчиков уровня Junior
▪️PHP разработчик
Удаленка. Social Media Holding — технологические IT- проекты
Подробнее
▪️Веб-программист
Санкт-Петербург. Информатика и Сервис — системный интегратор и разработчик
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️PHP Разработчик
Удаленка. Digital Services — разработка проектов в области кибербезопасности
Подробнее
▪️PHP Developer
Удаленка. Максимал — разработка сайтов любой сложности
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️Backend-разработчик
Москва. Present&Simple — бренд женской одежды
Подробнее
▪️PHP-разработчик
Удаленка. Fix Price. IT — международная торговая розничная сеть
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
Вакансии PHP разработчиков уровня Junior
▪️PHP разработчик
Удаленка. Social Media Holding — технологические IT- проекты
Подробнее
▪️Веб-программист
Санкт-Петербург. Информатика и Сервис — системный интегратор и разработчик
Подробнее
Вакансии PHP разработчиков уровня Middle
▪️PHP Разработчик
Удаленка. Digital Services — разработка проектов в области кибербезопасности
Подробнее
▪️PHP Developer
Удаленка. Максимал — разработка сайтов любой сложности
Подробнее
Вакансии PHP разработчиков уровня Senior
▪️Backend-разработчик
Москва. Present&Simple — бренд женской одежды
Подробнее
▪️PHP-разработчик
Удаленка. Fix Price. IT — международная торговая розничная сеть
Подробнее
Понравились вакансии?
❤️ — да
🤔 — нет
❤5👍1🤔1
В чем разница между методами dd() и dump()?
В Laravel методы dd() и dump() используются для вывода отладочной информации, но между ними есть некоторые различия:
Метод dd() (Dump and Die):
dd() расшифровывается как «Dump and Die».
Он выводит отладочную информацию и сразу завершает выполнение скрипта. Это удобно, когда нужно быстро остановить выполнение программы и просмотреть значения переменных или других данных.
Пример использования:
Метод dump():
dump() просто выводит отладочную информацию, но не останавливает выполнение скрипта. Это полезно, когда нужно просмотреть данные на разных этапах выполнения программы, не прерывая её работу.
Пример использования:
Таким образом, основное отличие заключается в том, что dd() завершает выполнение программы, а dump() — нет.
#вопросы_с_собеседований
В Laravel методы dd() и dump() используются для вывода отладочной информации, но между ними есть некоторые различия:
Метод dd() (Dump and Die):
dd() расшифровывается как «Dump and Die».
Он выводит отладочную информацию и сразу завершает выполнение скрипта. Это удобно, когда нужно быстро остановить выполнение программы и просмотреть значения переменных или других данных.
Пример использования:
$data = [1, 2, 3];
dd($data);
// Выведет содержимое переменной $data и остановит выполнение скрипта.
Метод dump():
dump() просто выводит отладочную информацию, но не останавливает выполнение скрипта. Это полезно, когда нужно просмотреть данные на разных этапах выполнения программы, не прерывая её работу.
Пример использования:
$data = [1, 2, 3];
dump($data);
// Выведет содержимое переменной $data, но скрипт продолжит выполнение.
Таким образом, основное отличие заключается в том, что dd() завершает выполнение программы, а dump() — нет.
#вопросы_с_собеседований
👍6😁5
CSV и PHP8.4+
Здесь обсуждаются изменения в PHP 8.4, касающиеся обработки CSV-файлов, и их влияние на разработчиков и библиотеку league/csv, которая является популярным инструментом для работы с CSV в PHP.
В новой версии PHP 8.4 будут введены новые функции, такие как асимметричная видимость и хуки для свойств, но также будут изменения в старых функциональностях, в частности, в обработке CSV.
Разработчикам рекомендуется обновить свой код, чтобы использовать пустую строку для параметра экранирования и избежать предупреждений о депрекации. В статье приводятся примеры кода с пояснениями, как это сделать.
Здесь обсуждаются изменения в PHP 8.4, касающиеся обработки CSV-файлов, и их влияние на разработчиков и библиотеку league/csv, которая является популярным инструментом для работы с CSV в PHP.
В новой версии PHP 8.4 будут введены новые функции, такие как асимметричная видимость и хуки для свойств, но также будут изменения в старых функциональностях, в частности, в обработке CSV.
Разработчикам рекомендуется обновить свой код, чтобы использовать пустую строку для параметра экранирования и избежать предупреждений о депрекации. В статье приводятся примеры кода с пояснениями, как это сделать.
👍6🎉3🔥1👏1
Yaml — король мета-описаний
На Хабре уже опубликовано несколько статей о Yaml, однако они выглядят однобоко и не раскрывают его истинную природу. В этой статье будет сделана попытка исправить этот недостаток, рассказав о Yaml в положительном контексте. Детальное описание синтаксиса стандартного Yaml здесь приводиться не будет, так как в Интернете и на самом Хабре имеется множество материалов на эту тему, ссылки на которые также можно найти в данной статье. Материал предназначен для тех, кто уже знаком с Yaml, но, возможно, испытывает к нему неприязнь.
На Хабре уже опубликовано несколько статей о Yaml, однако они выглядят однобоко и не раскрывают его истинную природу. В этой статье будет сделана попытка исправить этот недостаток, рассказав о Yaml в положительном контексте. Детальное описание синтаксиса стандартного Yaml здесь приводиться не будет, так как в Интернете и на самом Хабре имеется множество материалов на эту тему, ссылки на которые также можно найти в данной статье. Материал предназначен для тех, кто уже знаком с Yaml, но, возможно, испытывает к нему неприязнь.
Хабр
Yaml — король мета-описаний
На Хабре, было несколько статей о Yaml, но мне кажется все они однобоки и не раскрывают его истинную природу. Я попробую это исправить и рассказать о Yaml в положительном контексте. Не буду вновь...
🥱2👍1
Привет, друзья! 👋
Мы готовим статью о прокрастинации среди разработчиков и хотим узнать ваше мнение! 🤓 Поделитесь своим опытом, а самые интересные и полезные советы мы обязательно включим в нашу статью.
❓ Какая самая необычная причина прокрастинации у вас была в работе над проектом?
❓ Какой метод борьбы с прокрастинацией оказался для вас наиболее эффективным?
❓ Как вы справляетесь с когнитивной перегрузкой во время работы над сложными задачами?
Не стесняйтесь делиться своими историями и лайфхаками в комментариях! 💬 Ваш опыт может помочь другим разработчикам справиться с прокрастинацией. Спасибо за участие!
Мы готовим статью о прокрастинации среди разработчиков и хотим узнать ваше мнение! 🤓 Поделитесь своим опытом, а самые интересные и полезные советы мы обязательно включим в нашу статью.
❓ Какая самая необычная причина прокрастинации у вас была в работе над проектом?
❓ Какой метод борьбы с прокрастинацией оказался для вас наиболее эффективным?
❓ Как вы справляетесь с когнитивной перегрузкой во время работы над сложными задачами?
Не стесняйтесь делиться своими историями и лайфхаками в комментариях! 💬 Ваш опыт может помочь другим разработчикам справиться с прокрастинацией. Спасибо за участие!
👍3
Топ-5 стратегий кэширования
➡️ Реальное использование:
🔹 Cache Aside + Write Through: обеспечивает согласованную синхронизацию кэша/БД, позволяя при этом осуществлять контроль заполнения кэша во время чтения. Немедленные записи в базу данных могут нагружать БД.
🔹 Read Through + Write Back: абстрагирует БД и хорошо справляется с потоком трафика записи, задерживая синхронизацию. Однако это сопряжено с риском большей потери данных, если кэш выйдет из строя до синхронизации буферизованных записей с базой данных.
👉 Источник
➡️ Реальное использование:
🔹 Cache Aside + Write Through: обеспечивает согласованную синхронизацию кэша/БД, позволяя при этом осуществлять контроль заполнения кэша во время чтения. Немедленные записи в базу данных могут нагружать БД.
🔹 Read Through + Write Back: абстрагирует БД и хорошо справляется с потоком трафика записи, задерживая синхронизацию. Однако это сопряжено с риском большей потери данных, если кэш выйдет из строя до синхронизации буферизованных записей с базой данных.
👉 Источник
👍6
#дайджест новостей по PHP за неделю:
🔎Стратегии предварительной выборки активов с Vite в Laravel 11.21 — На этой неделе команда Laravel выпустила версию 11.21, которая включает стратегии предварительной выборки активов для Vite, удобный метод принудительного уничтожения моделей с мягким удалением, обновления помощников для тестирования и многое другое.
🔎Symfony 7.1 с новыми возможностями
🔎PHP 8.4.0 Beta 3 теперь доступен для тестирования — Команда PHP рада сообщить о выходе PHP 8.4.0, Beta 3. Это первая бета-версия, продолжающая цикл выпуска PHP 8.4, примерный план которого указан в PHP Wiki.
🔎Неделя Symfony #921 (19-25 августа 2024 года) — На этой неделе в грядущей версии Symfony 7.2 была добавлена возможность рендеринга блока Twig с атрибутом Template, улучшен Serializer с конвертером имен из змеиного регистра в верблюжий, а также добавлена поддержка новых операторов в компоненте ExpressionLanguage.
🔎Стратегии предварительной выборки активов с Vite в Laravel 11.21 — На этой неделе команда Laravel выпустила версию 11.21, которая включает стратегии предварительной выборки активов для Vite, удобный метод принудительного уничтожения моделей с мягким удалением, обновления помощников для тестирования и многое другое.
🔎Symfony 7.1 с новыми возможностями
🔎PHP 8.4.0 Beta 3 теперь доступен для тестирования — Команда PHP рада сообщить о выходе PHP 8.4.0, Beta 3. Это первая бета-версия, продолжающая цикл выпуска PHP 8.4, примерный план которого указан в PHP Wiki.
🔎Неделя Symfony #921 (19-25 августа 2024 года) — На этой неделе в грядущей версии Symfony 7.2 была добавлена возможность рендеринга блока Twig с атрибутом Template, улучшен Serializer с конвертером имен из змеиного регистра в верблюжий, а также добавлена поддержка новых операторов в компоненте ExpressionLanguage.
👍4❤2
Эта статья посвящена потенциальным уязвимостям, связанным с использованием слабого сравнения (==) в PHP. В отличие от строгого сравнения (===), слабое сравнение не учитывает типы данных и может привести к непредсказуемым результатам, что делает код уязвимым для атак.
PHP Loose Comparison (Слабое сравнение в PHP)
Слабое сравнение происходит, когда два значения сравниваются оператором ==, который не проверяет типы данных. PHP пытается привести сравниваемые значения к общему типу перед сравнением, что может приводить к неожиданным результатам. Например, строка 'string' при сравнении с true будет считаться эквивалентной true.
Уязвимые сценарии
Автор приводит два примера, где слабое сравнение может стать причиной серьезных проблем:
✔️Небезопасная система авторизации:
Пример с проверкой логина и пароля, где хакер может подменить значения на true, что приведет к успешной авторизации даже при неправильных данных.
✔️Небезопасная авторизация с использованием switch:
В этом примере хакер может получить доступ к привилегиям администратора, просто подставив true в качестве значения $_POST['user_role'], так как switch-case также использует слабое сравнение.
Смягчение уязвимостей
Чтобы избежать таких проблем, рекомендуется использовать строгое сравнение (===), которое проверяет и значение, и тип данных. Также, начиная с PHP 8.0, можно использовать конструкцию match, которая работает как switch, но использует строгое сравнение, что делает код более безопасным.
PHP Loose Comparison (Слабое сравнение в PHP)
Слабое сравнение происходит, когда два значения сравниваются оператором ==, который не проверяет типы данных. PHP пытается привести сравниваемые значения к общему типу перед сравнением, что может приводить к неожиданным результатам. Например, строка 'string' при сравнении с true будет считаться эквивалентной true.
Уязвимые сценарии
Автор приводит два примера, где слабое сравнение может стать причиной серьезных проблем:
✔️Небезопасная система авторизации:
Пример с проверкой логина и пароля, где хакер может подменить значения на true, что приведет к успешной авторизации даже при неправильных данных.
✔️Небезопасная авторизация с использованием switch:
В этом примере хакер может получить доступ к привилегиям администратора, просто подставив true в качестве значения $_POST['user_role'], так как switch-case также использует слабое сравнение.
Смягчение уязвимостей
Чтобы избежать таких проблем, рекомендуется использовать строгое сравнение (===), которое проверяет и значение, и тип данных. Также, начиная с PHP 8.0, можно использовать конструкцию match, которая работает как switch, но использует строгое сравнение, что делает код более безопасным.
👍15😁7🔥2❤1🌚1
Топ модулей для распознавания рекапчи на Python, Node js и PHP
В эпоху автоматизации большинство решений находится в свободном доступе. И речь идет не только о решении задач по математике, но и о более сложных задачах, таких как парсинг данных или, как в данном случае, распознавание рекапчи. Однако, как выбрать подходящий модуль? Ведь доступ к технологиям имеют как добросовестные разработчики, так и мошенники.
Был проведен анализ рынка модулей для распознавания капчи, и на основе этого составлен субъективный топ модулей для трех популярных языков программирования.
В эпоху автоматизации большинство решений находится в свободном доступе. И речь идет не только о решении задач по математике, но и о более сложных задачах, таких как парсинг данных или, как в данном случае, распознавание рекапчи. Однако, как выбрать подходящий модуль? Ведь доступ к технологиям имеют как добросовестные разработчики, так и мошенники.
Был проведен анализ рынка модулей для распознавания капчи, и на основе этого составлен субъективный топ модулей для трех популярных языков программирования.
Хабр
Топ модулей для распознавания рекапчи на Python, Node js и PHP
В наш век автоматизации большинство решений можно найти в свободном доступе, и я говорю сейчас не про решение задач по математике, а чуть более сложные задачи, типа парсинга данных, и как в нашем...
👍5