Existe uma maneira (relativamente) segura de executar comandos CLI da web?

Existe uma maneira (relativamente) segura de executar comandos CLI da web?

Desde que comecei a programar aplicativos LAMP eu queria desenvolver um painel de controle administrativo para minhas caixas. (Para fins lúdicos e educativos, caso contrário usaria algo já existente no mercado)

Mas o que sempre me impediu é que sempre ouvi que as funções exec() (a única maneira que conheço de conseguir isso) são más... você sabe: "não as use", "é uma codificação ruim", etc.

O que nunca ouvi é uma alternativa mais segura para esse fim, então minha pergunta é:

Existe algum?

Não é suficiente executar esse aplicativo em um servidor web dedicado, com uma raiz de documentos protegida por senha?

Bem, essa é a minha dúvida.

Responder1

Acho que o risco real é quando você mistura a entrada do usuário em um desses exec(). É aqui que entra a maior parte do risco, já que você permite que os usuários forneçam informações que, quando misturadas à CLI, podem fazer coisas perigosas, como inserir ponto-e-vírgula ( ;) em uma caixa de texto e executar comandos adicionais após eles forneci argumentos.

Portanto, em geral, executar comandos somente leitura não deve ser mais perigoso do que fazer outra coisa.

É basicamente o mesmo problema de um ataque de injeção de SQL, com o qual você deve estar mais familiarizado.

Responder2

Pelo que eu sei (e não sou um programador, então aceite isso com uma pitada de sal), exec()as chamadas não são nada más. Acontece que eles bifurcam um novo processo e têm uma sobrecarga alta, já que você está chamando uma função do sistema. Geralmente, as pessoas sugerem que você faça coisas internamente em qualquer programa/script que esteja escrevendo e evite chamadas externas como exec().

Porém, se o seu objetivo é executar comandos no sistema, não há como fazer isso sem tal chamada. Claro, existem riscos de segurança, permitir que usuários aleatórios executem comandos arbitrários em seu servidor é um convite a problemas. No entanto, se o acesso a este servidor for severamente restrito, você poderá fazê-lo com segurança.

De qualquer forma, conclusão principal: exec()as funções não são inerentemente ruins, elas simplesmente tendem a ser menos eficientes do que fazer algo internamente.

informação relacionada