#std774¶
Безопасность запуска приложений¶
1.¶
При запуске внешней программы из кода собирайте командную строку только из проверенных частей.
Если любая часть команды получена из:
- базы данных;
- пользовательского ввода в форме;
- хранилища настроек,
перед запуском проверяйте безопасность значения.
Небезопасными считайте строки, содержащие символы:
$ ` | || ; & &&
Требование распространяется на все способы запуска, включая:
КомандаСистемы();ЗапуститьПриложение();НачатьЗапускПриложения();ПерейтиПоНавигационнойСсылке();- COM-объекты
Wscript.ShellиShell.Application.
2.¶
При использовании БСП для запуска внешних программ применяйте профильный API.
2.1.¶
Чтобы открыть проводник с фокусом на каталоге/файле, используйте ФайловаяСистемаКлиент.ОткрытьПроводник.
Пример
2.2.¶
Чтобы открыть файл в ассоциированной программе, используйте ФайловаяСистемаКлиент.ОткрытьФайл().
Метод блокирует запуск исполняемых файлов (*.exe, *.bin, *.apk и т.п.).
Пример
2.3.¶
Чтобы открыть веб-страницу, вызвать программу по протоколу (mailto:, skype:, tel: и т.д.) или открыть навигационную ссылку ИБ, используйте ФайловаяСистемаКлиент.ОткрытьНавигационнуюСсылку().
Для открытия файловой системы не формируйте file://-ссылки.
Для этого применяйте только ОткрытьПроводник() и ОткрытьФайл().
Пример
2.4.¶
Для запуска исполняемых файлов, системных команд и серверных команд, а также для получения stdout/stderr используйте:
ФайловаяСистемаКлиент.ЗапуститьПрограмму()в клиентском коде;ФайловаяСистема.ЗапуститьПрограмму()в серверном коде.
Пример
ФайловаяСистемаКлиент.ЗапуститьПрограмму("calc");
ПараметрыЗапуска = ФайловаяСистема.ПараметрыЗапускаПрограммы();
ПараметрыЗапуска.ДождатьсяЗавершения = Истина;
ПараметрыЗапуска.ПолучитьПотокВывода = Истина;
ПараметрыЗапуска.ПолучитьПотокОшибок = Истина;
Результат = ФайловаяСистема.ЗапуститьПрограмму("ping 127.0.0.1 -n 5", ПараметрыЗапуска);
КодВозврата = Результат.КодВозврата;
ПотокВывода = Результат.ПотокВывода;
ПотокОшибок = Результат.ПотокОшибок;
2.5.¶
Не формируйте динамически исполняемые файлы во временном каталоге (например, bat-файлы с последующим запуском).
Это усложняет политику белых списков и создает дополнительный вектор атаки.
Вместо этого:
- передавайте команду напрямую в
ФайловаяСистема.ЗапуститьПрограмму(); - или используйте статический доверенный исполняемый файл и передавайте параметры через аргументы командной строки или неисполняемый файл параметров.
3.¶
Если операция требует запуска внешней программы с повышением прав (например, UAC в Windows), реализуйте ее как отдельную команду формы и отображайте на кнопке значок щита.


См. также¶
- #std770: Ограничения на использование Выполнить и Вычислить на сервере
- #std775: Безопасность программного обеспечения, вызываемого через открытые интерфейсы