Данфа

Прощание с eval(): Как переписать код и спать спокойно

Функция eval() — это попытка интерпретатора PHP выполнить произвольную строку как программный код. Это швейцарский нож, у которого вместо лезвия — циркулярная пила. Она удобна для написания «умных» конфигураций или динамических правил, но делает ваш проект уязвимым к RCE-атакам (Remote Code Execution) и невозможным для статического анализа инструментами вроде Psalm или PHPStan.

Хорошая новость: в 95% случаев можно найти безопасную альтернативу без потери функционала.



Сценарий 1: Динамические правила и математические выражения


Проблема: Пользователь вводит формулу скидки, например (price * quantity) - bonus. Вы используете eval("return $formula;").

Решение 1: Библиотеки парсинга выражений
Вместо выполнения кода, разберите его синтаксис.
  • Инструмент: symfony/expression-language или nxp/math-parser.
  • Как работает: Эти библиотеки не исполняют код, а строят дерево операций (AST). Они понимают только математику и логику, игнорируя системные вызовы.

// Было (Опасно)
$result =
...

Чем чреваты права доступа 777 (drwxrwxrwx)

Права доступа 777 (drwxrwxrwx) означают, что абсолютно все пользователи (включая посторонних) могут читать, записывать и выполнять файлы и каталоги. Хотя это может показаться удобным решением для быстрого предоставления прав, на практике это крайне небезопасно и чревато серьёзными последствиями:

Основные риски использования прав 777



Возможность произвольной записи
Любой пользователь, получивший доступ к серверу, сможет записывать файлы в каталоги с правами 777. Это открывает двери для вредоносного ПО, вирусов и хакерских атак.

Риски инъекций и атак
Права 777 позволяют злоумышленникам внедрять вредоносный код, скрипты или файлы, которые могут быть выполнены сервером, приводя к компрометации всего сайта или сервера.

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

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

Cross site forgery request (CSFR) detected

Сообщение «Cross-site forgery request (CSRF) detected» означает, что система безопасности обнаружила попытку несанкционированного межсайтового запроса (CSRF), и заблокировала его. Такие попытки обычно происходят, когда злоумышленник пытается обмануть пользователя, заставив его совершить нежелательные действия на доверенном сайте путем подделывания запроса с другого домена.

Что такое CSRF?


CSRF (cross-site request forgery) — это уязвимость веб-приложений, позволяющая злоумышленнику заставить жертву отправить вредоносный запрос к сайту, которому жертва доверяет. Например, если вы вошли на банковский сайт и открыли другую вкладку с поддельным сайтом, мошенник может попытаться заставить вас выполнить транзакцию или удалить аккаунт на доверенном сайте, используя сессионные куки жертвы.

Типичные сценарии атаки CSRF


  1. Удаление аккаунта или сброс пароля: Жертву заставляют подтвердить сброс пароля или удаление аккаунта через скрытые формы или гиперссылки.
  2. Перевод денег: Пользователь открывает
...

Как предоставить сторонним сайтам доступ к вашим файлам для получения информации

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

Зачем предоставлять доступ сторонним сайтам?


  • Монетизация: Продажа доступа к уникальным данным или услугам.
  • Партнерство: Совместная работа с партнерами, предоставление информации о товарах или услугах.
  • Повышение лояльности: Доступ к актуальной информации укрепляет доверие клиентов и партнеров.

Как это сделать?


  1. Использование API: Создайте RESTful API, который предоставляет доступ к информации в формате JSON или XML. Сторонние сайты могут отправлять запросы и получать данные.
  2. Файлы для скачивания: Поставьте файлы в общедоступную директорию или создайте защищённый доступ с помощью авторизации.
  3. RSS-каналы: Предоставьте RSS-канал с актуальными данными, чтобы сторонние сайты могли автоматически получать обновления.
  4. CDN (
...

MySQLi: Использование функции bind_param()

При разработке веб-приложений на PHP одна из важнейших задач — защита от SQL-инъекций, позволяющих злоумышленникам внедрить вредоносный код в запросы к базе данных. Одним из эффективных решений этой проблемы являются подготовленные выражения (prepared statements) в комбинации с функцией bind_param(), доступной в библиотеке MySQLi.

Эта статья объясняет, как правильно использовать функцию bind_param() для безопасной передачи данных в SQL-запросы, избавляясь от риска SQL-инъекций и улучшая производительность приложений.

Что такое bind_param()?


Функция bind_param() — это встроенный метод библиотеки MySQLi, предназначенный для связывания переменных с плейсхолдерами в подготовленных выражениях. Она позволяет надёжно передавать данные в SQL-запросы, предотвращая возможность внесения опасных команд злоумышленниками.

Принцип работы:
  1. Создать подготовленный запрос с плейсхолдерами (?).
  2. Привязать переменные к плейсхолдерам с указанием их типов.
  3. Выполнить запрос.

Как использовать bind_param()?



Шаг 1: Под...