избегая эксплойта в экстраполяции переменной perl из файла - PullRequest
2 голосов
/ 21 апреля 2011

Я оптимизирую очень трудоемкую программу, запустив ее над набором данных и под несколькими параметрами.Для каждого «запуска» у меня есть CSV-файл, «setup.csv», настроенный с «runNumber», «Command» для каждого запуска.Затем я импортирую его в сценарий perl, чтобы прочитать команду для номера прогона, который мне нужен, экстраполировать переменные, а затем выполнить его в системе с помощью системной команды.Должен ли я беспокоиться о возможности его использования (я сейчас обеспокоен)?Если так, что я могу сделать, чтобы защитить наш сервер?Теперь я планирую изменить права доступа к файлу «setup.csv» только для чтения и владения root, а затем войти в систему как root всякий раз, когда мне нужно добавить еще один прогон в список.Большое спасибо за уделенное время.

Ответы [ 2 ]

6 голосов
/ 21 апреля 2011

Запустите ваш код в режиме taint с помощью -T. Это заставит вас тщательно отмывать ваши данные. Проходите только те строки, которые вы ожидаете. Не отмывайте с .*, а скорее проверяйте список хороших строк.

1 голос
/ 21 апреля 2011

В идеале, есть список известных допустимых значений, и вы проверяете это.

В любом случае вы хотите избежать оболочки, используя форму с несколькими аргументами system или с помощью IPC :: System :: Simple systemx.

Если вы не можете избежать оболочки, вы должны правильно преобразовать текст для передачи в команду влитералы оболочки.

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

Наконец, вы можете убедиться, что аргументы не содержат символ NUL (\0).

systemx('tool', '--', @args)

Примечание. Передача произвольных строк невозможна в Windows.Требуется дополнительная проверка.

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