Вероятно, вам следует использовать dig ... '$query'
, поэтому он будет заключен в одинарные кавычки, когда оболочка его увидит. Если вы этого не сделаете, оболочка будет интерпретировать любые метасимволы. Если кто-то вставит "; echo my_key > ~/.ssh/authorized_keys"
в вашу веб-форму, значит, вы облажались. Даже если он предназначен только для внутреннего использования, вы не захотите, чтобы он сломался, если кто-то вставит в запрос что-то с пробелами (которые оболочка разделит на слова и передаст в dig как два аргумента).
Вы можете использовать perl's
\Q$query\E
, чтобы расширить $ query с помощью потенциального метасимвола \ escape. На самом деле, это гораздо лучше, чем добавлять одинарные кавычки, если запрос содержит символ одинарных кавычек, он выйдет из кавычек. По-прежнему супер-легко атаковать. Это
должно исправить это в вашей памяти .
В Perl есть безопасные способы использовать функцию system () для указания аргументов в виде списка строк, избегая / bin / sh, а не одной строки, которая будет оцениваться как команда оболочки. Это самый безопасный способ, но нет версии с обратной галочкой, если вы не выполните конвейер && fork && exec самостоятельно.