Приведите пример уязвимости при обработке входных данных в программе на Bash или Python (команда с подстановкой), объясните риски исполнения команд и предложите безопасные альтернативы

15 Дек 2025 в 11:06
32 +1
0
Ответы
1
Пример уязвимости + объяснение рисков и безопасные альтернативы.
Bash — уязвимый пример
- Уязвимый код:
```
#!/bin/bash
pattern="$1"
# опасно: eval исполнит любую вставку из $pattern
eval "grep -n $pattern /var/log/syslog"
```
- Пример атаки: при `pattern='; rm -rf /'` будет выполнена команда `rm -rf /`.
- Риски: произвольное выполнение команд, удаление/эксфильтрация данных, получение контроля над системой.
Bash — безопасные альтернативы
- Не использовать eval; правильно экранировать/кавычить и использовать `--` для аргументов:
```
pattern="$1"
grep -n -- "$pattern" /var/log/syslog
```
- Проверка/валидация/вайтлистинг входа (разрешать только ожидаемые шаблоны).
- Если нужно строить список аргументов динамически, используй массивы:
```
args=(grep -n -- "$pattern" /var/log/syslog)
"${args[@]}"
```
- Чтение без обработки спецсимволов: `read -r user_input`.
Python — уязвимый пример
- Уязвимый код:
```python
import os
user = input("file: ")
# опасно: формирование строки для shell
os.system("tar -czf backup.tar.gz " + user)
```
- Пример атаки: при вводе `"; rm -rf /"` будет выполнено удаление.
Python — безопасные альтернативы
- Использовать subprocess без shell и передавать аргументы как список:
```python
import subprocess
user = input("file: ")
subprocess.run(["tar", "-czf", "backup.tar.gz", user], check=True)
```
- Если shell необходим, экранировать аргументы через shlex.quote:
```python
import shlex, subprocess
safe = shlex.quote(user)
subprocess.run("tar -czf backup.tar.gz " + safe, shell=True, check=True)
```
- Дополнительно: валидация/вайтлистинг имён файлов, ограничение прав процесса (least privilege), использование временных директорий и проверка путей (не позволять `..`), явное управление правами доступа.
Краткие правила безопасности
- Никогда не подставлять сырые пользовательские строки в команды shell (особенно через eval или shell=True).
- Использовать API, принимающие аргументы как список (subprocess без shell, массивы в bash).
- Валидировать/ограничивать входные данные (вайтлист), применять escaping если shell неизбежен.
- Минимизировать права процесса и логировать подозрительные вводы.
15 Дек 2025 в 11:13
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир