Para inserir uma string em um snippet de shell e organizar o shell para interpretar a string literalmente, há duas abordagens relativamente simples:
- Coloque a string entre aspas simples e substitua cada cota única
'
pela string de quatro caracteres'\''
. - Prefixe cada caractere de pontuação ASCII com
\
(você também pode prefixar outros caracteres) e substitua as novas linhas por''
ou""
(nova linha entre aspas simples ou duplas).
Ao invocar um comando remoto sobre SSH, lembre-se de que o shell remoto expandirá o comando e, além disso, se você estiver chamando o SSH por meio de um shell local, o shell local também executará a expansão. citar duas vezes.
O PHP fornece a função escapeshellarg
para escapar de caracteres especiais do shell. O Snce exec
executa a expansão, chame-o duas vezes na string que deseja proteger.
Observe que isso é bom para strings de texto, mas não para strings de bytes. A maioria das shells não permite a passagem de bytes nulos.
Outra abordagem que é menos propensa a erros e permite que sequências de bytes arbitrárias passem, mas requer a alteração do que é executado na outra extremidade, é passar a string na entrada padrão do comando remoto .