Skip to content

Latest commit

 

History

History
109 lines (86 loc) · 9.83 KB

SECURITY.MD

File metadata and controls

109 lines (86 loc) · 9.83 KB

1. Что такое PHP-инъекция, как её эксплуатируют и как её избежать

PHP-инъекция (PHP injection) является видом атаки на веб-приложение, когда злоумышленник внедряет и выполняет вредоносный PHP-код в уязвимую часть приложения

Потенциально опасными функциями являются:

eval()
exec(), system(), passthru()
preg_replace() (с модификатором «e»)
require_once()
include_once()
include()
require()
mysqli::query()
unserialize()
create_function()

Эксплуатация PHP-инъекции может происходить, когда входные данные, передаваемые пользователем, не достаточно проверяются или экранируются перед использованием в динамическом PHP-коде.

Для предотвращения PHP-инъекций рекомендуется следовать некоторым основным практикам:

Фильтрация и валидация входных данных Проверяйте и очищайте все входные данные, полученные от пользователей, прежде чем использовать их в динамическом PHP-коде.
Использование подготовленных запросов Если вам необходимо выполнять SQL-запросы, используйте подготовленные запросы с параметрами вместо конкатенации пользовательских данных в строку запроса.
Корректное экранирование данных Если вы используете пользовательские данные в динамическом PHP-коде, убедитесь, что вы правильно экранируете специальные символы, чтобы предотвратить их интерпретацию как кода. Используйте функцию htmlspecialchars() или аналогичные функции для экранирования данных перед выводом на страницу.
Ограничение прав доступа Удостоверьтесь, что ваше приложение работает от имени пользователя с наименьшими привилегиями. Это поможет ограничить возможности злоумышленника в случае успешной атаки.
Обновление и безопасность Регулярно обновляйте PHP и используйте последние версии фреймворков или библиотек, чтобы иметь доступ к последним исправлениям уязвимостей. Также рекомендуется применять другие меры безопасности, такие как хеширование паролей, защита от CSRF-атак и использование HTTPS.

2. Что такое SQL-инъекция, как её эксплуатируют и как её избежать

SQL-инъекция - это уязвимость веб-приложений, при которой злоумышленник может внедрить и выполнить вредоносный SQL-код в SQL-запросе к базе данных. Это происходит, когда входные данные, передаваемые в SQL-запрос, не проверяются или не экранируются должным образом.

Для избежания SQL-инъекций рекомендуется применять следующие меры безопасности:

  • Используйте подготовленные запросы (Prepared Statements) или параметризованные запросы, которые позволяют отделить SQL-код от данных.
  • Никогда не доверяйте входным данным от пользователей. Всегда проводите валидацию и санитизацию входных данных.
  • Используйте механизмы обработки ошибок и логирования, чтобы получать уведомления о возможных атаках SQL-инъекций и принимать соответствующие меры.
  • Ограничьте права доступа пользователя к базе данных. Используйте принцип наименьших привилегий (Least Privilege Principle), предоставляя пользователю только необходимые разрешения для выполнения запросов.
  • Обновляйте и поддерживайте систему управления базами данных (СУБД) и библиотеки доступа к базе данных (например, PDO или MySQLi), чтобы иметь последние исправления уязвимостей.
  • Используйте средства фильтрации входных данных, такие как экранирование символов (escaping), чтобы предотвратить внедрение специальных символов в SQL-код.
  • Регулярно проводите аудит безопасности приложения и базы данных, чтобы выявить возможные уязвимости и применить соответствующие исправления.

2. Что такое XSS уязвимость, как её эксплуатируют и как её избежать

XSS (Cross-Site Scripting) - это уязвимость веб-приложений, при которой злоумышленник может внедрить и выполнить вредоносный скрипт (обычно JavaScript) на стороне клиента. Это происходит, когда недостаточно проверяются или экранируются пользовательские данные, которые выводятся на веб-странице.

Методы эксплуатации: Кража данных пользователя (перехватить логинов, паролей, cookie-файлы), манипуляция сессией пользователя (используя сессию), распространение вредоносных скриптов

Меры безопасности:

  • Экранирование и фильтрация входных данных
  • Никогда не доверяйте входным данным от пользователей.
  • Использовать контекстно-зависимое экранирование.
  • Используйте заголовки Content Security Policy (CSP), которые позволяют настроить политику безопасности для вашего веб-приложения.
  • Обновляйте и поддерживайте вашу веб-платформу и библиотеки.

3. Стоит ли запускать приложение под пользователем root или лучше создать отдельного пользователя? Почему это лучше?

Лучше создать отдельного пользователя для запуска приложения, а не использовать пользователя root.

  • Принцип наименьших привилегий: Использование отдельного пользователя ограничивает привилегии, которые приложение имеет на системе.
  • Безопасность: Использование отдельного пользователя помогает защитить систему от потенциальных угроз безопасности. Если приложение запущено от имени пользователя root и его уязвимости могут быть эксплуатированы, злоумышленник получит полный контроль над системой.
  • Разделение ответственности: Использование отдельного пользователя помогает разделить ответственность между системными задачами и задачами приложения.
  • Аудит и отслеживаемость: Использование отдельного пользователя позволяет лучше контролировать и отслеживать действия, связанные с приложением.

4. Приведи пример CSRF-атаки

  • Атака на веб-приложение, при которой злоумышленник заставляет авторизованного пользователя выполнять нежелательные действия без его согласия.
  • Выполнение нежелательных действий от имени авторизованных пользователей.

Назад