Skip to main content

V5.3.5 Output Encoding and Injection Prevention

Requirement:#

Verify that where parameterized or safer mechanisms are not present, context-specific output encoding is used to protect against injection attacks, such as the use of SQL escaping to protect against SQL injection. (C3, C4)

Explanation:#

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

Remediation:#

Чтобы исправить атаки путем внедрения, когда параметризованные запросы или ORM недоступны, необходимо выполнять следующие действия:

  1. Использовать зависящее от контекста кодирование вывода.

Данные должны быть должным образом экранированы перед использованием в запросе к базе данных, например, с использованием экранирования SQL для защиты от внедрения SQL.

  1. Реализовать проверку ввода.

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

  1. Экранирование специальных символов.

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

  1. Мониторинг журналов.

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

  1. Обновлять программное обеспечение.

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

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

Вот пример того, как использовать зависящее от контекста кодирование вывода в PHP для защиты от атак путем внедрения SQL:

$user_input = $_POST['user_input'];
// Escape special characters in the user input
$safe_input = mysqli_real_escape_string($conn, $user_input);
// Use the escaped input in a database query
$query = "SELECT * FROM users WHERE username = '$safe_input'";
$result = mysqli_query($conn, $query);

В этом примере mysqli_real_escape_string() используется для экранирования специальных символов в пользовательском вводе. Это помогает предотвратить внедрение злоумышленниками вредоносного кода в команду SQL. Экранированный ввод затем используется в запросе к базе данных, гарантируя, что он обрабатывается отдельно от команды SQL. Важно отметить, что использование зависящего от контекста кодирования выходных данных — это только один аспект защиты от атак путем внедрения. Вы также должны внедрить проверку ввода и регулярно отслеживать журналы на предмет подозрительной активности.

Additional:#