Могу ли я разрешить своей программе запускать сценарии?

Некоторые пользователи предполагают, что моя (C#) программа должна иметь возможность запускать сценарии после завершения своей работы. Это будет сделано через командную строку, которая будет введена в моем диалоговом окне конфигурации.

Я не эксперт по безопасности, поэтому не уверен, что это приемлемо с точки зрения безопасности. Поскольку приложение работает с правами администратора (в Windows), не будет ли это огромным риском для безопасности? Кто-то может просто изменить файлы конфигурации моего приложения, чтобы они указывали на потенциально опасный скрипт, не так ли?

С другой стороны, многие приложения позволяют это, запрашивая права администратора, поэтому я думаю, что это должно быть нормально, но я подумал, что лучше обратиться за советом, прежде чем повсюду открывать широкие дыры в безопасности =)

Могу ли я разрешить моему приложению, работающему с полными правами, запускать указанные пользователем сценарии?


person Clément    schedule 05.07.2011    source источник
comment
Если кто-то может редактировать ваши файлы конфигурации, у вас уже есть проблема с безопасностью даже без приложения C #, которое вы создаете.   -  person M3NTA7    schedule 05.07.2011
comment
@ M3NTA7: Любой текстовый файл потенциально может быть отредактирован, и ini-файлы не являются исключением, не так ли? Дело в том, что некоторые люди будут использовать приложение как переносное, поэтому оно не будет установлено в папку Program Files.   -  person Clément    schedule 05.07.2011
comment
Вопрос в том, ХОТИТЕ ли вы, чтобы файл конфигурации редактировался пользователем с помощью текстового редактора, или пользователь должен пройти через ваше приложение, чтобы внести изменения. Несмотря на ограничительные меры, принуждение пользователя к использованию вашего приложения может помочь обеспечить целостность данных.   -  person Corey Ogburn    schedule 05.07.2011


Ответы (2)


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

person Eugene Mayevski 'Callback    schedule 05.07.2011

C#, безусловно, позволяет запускать пользовательский сценарий. System.Diagnostics.Process делает это очень просто. Вопрос безопасности здесь другая проблема.

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

Корень этой проблемы в том, что ваши параметры (я предполагаю) основаны на тексте и легко редактируются. Лучше всего зашифровать файл конфигурации, чтобы предотвратить его внешние изменения. Обратите внимание, что это не мешает людям использовать ваше приложение для изменения ваших параметров, чтобы разрешить вредоносный сценарий, но для того, чтобы кто-то это сделал, им нужен доступ к экземпляру вашего приложения, а не просто доступ к файлу для чтения/записи.

Это ставит под сомнение еще один аспект, на который следует обратить внимание. Не используйте один и тот же ключ для каждой установки вашего приложения. Если вы это сделаете, Боб может заставить Алису запустить вредоносный сценарий, скопировав конфигурацию Алисы, используя свой экземпляр вашего приложения, чтобы расшифровать его и внести изменения, а затем Боб может заменить конфигурацию Алисы новой вредоносной конфигурацией.

Вот еще один вопрос SO о том, как шифровать строки в C#.

person Corey Ogburn    schedule 05.07.2011
comment
Да, но я хочу, чтобы люди могли редактировать файл конфигурации вручную, что предотвращает шифрование. - person Clément; 06.07.2011
comment
Если люди могут редактировать его вручную, не используя ваше приложение, то это могут сделать и вредоносные программы (или злоумышленники). Это стена между простотой использования и безопасностью. Изучите этот вопрос, чтобы узнать, как запустить указанный пользователем процесс в качестве процесса без прав администратора из процесса администратора: stackoverflow.com/questions/5296917/ - person Corey Ogburn; 06.07.2011