В настоящее время мы создаем приложение, которое выполняет ряд внешних инструментов. Нам часто приходится передавать информацию, введенную пользователями в наши системы.Предотвращение инъекций в командной строке
Очевидно, что это большой кошмар безопасности, ожидающий своего служения.
К сожалению, мы еще не нашли классов в .NET Framework, которые выполняют программы с командной строкой, предоставляя тем же типам защиты от инъекционных атак, что и объекты IDbCommand для баз данных.
Сейчас мы используем очень примитивную строку замещения, которую я подозреваю, весьма недостаточным:
protected virtual string Escape(string value) { return value .Replace(@"\", @"\\") .Replace(@"$", @"\$") .Replace(@"""", @"\""") .Replace("`", "'") ; }
Что вы, ребята, чтобы предотвратить атаки инъекционные командной строки? Мы планируем внедрить регулярное выражение, которое является очень строгим и допускает только очень небольшое подмножество символов, но мне было интересно, есть ли лучший способ.
Некоторые пояснения:
- Некоторые из этих инструментов не имеют API, мы можем программировать против. Если бы они это сделали, у нас не было бы этой проблемы.
- Пользователи не выбирают инструменты для выполнения, они вводят метаданные, которые использовались нами для использования (например, ввод метаданных, таких как уведомления об авторских правах, в целевые файлы).