¿Existe una forma (relativamente) segura de ejecutar comandos CLI desde la web?

¿Existe una forma (relativamente) segura de ejecutar comandos CLI desde la web?

Desde que comencé a programar aplicaciones LAMP quise desarrollar un panel de control de administración para mis cajas. (Para fines divertidos y educativos, de lo contrario usaría algo que ya existe en el mercado)

Pero lo que siempre me detuvo es que siempre escuché que las funciones exec() (la única forma que conozco de lograr esto) son malvadas... ya sabes: "no las uses", "es una mala codificación", etc.

Lo que nunca escuché es una alternativa más segura para ese propósito, entonces mi pregunta es:

¿Hay alguna?

¿No es suficiente ejecutar esa aplicación en un servidor web dedicado, con una raíz de documentos protegida con contraseña?

Bueno esa es mi duda.

Respuesta1

Creo que el riesgo real es cuando mezclas información del usuario en una de estas exec(). Aquí es donde entraría la mayor parte del riesgo, ya que está permitiendo que los usuarios le proporcionen información que, cuando se mezcla con la CLI, puede hacer cosas peligrosas, como insertar punto y coma ( ;) en un cuadro de texto y ejecutar comandos adicionales después de ellos. He proporcionado argumentos.

Entonces, en general, ejecutar comandos en modo de solo lectura no debería ser más peligroso que hacer otra cosa.

Es básicamente el mismo problema que con un ataque de inyección SQL, con el que quizás estés más familiarizado.

Respuesta2

Hasta donde yo sé (y realmente no soy programador, así que tómalo con una pizca de sal), exec()las llamadas no son nada malas. Es solo que bifurcan un nuevo proceso y tienen una gran sobrecarga ya que estás llamando a una función del sistema. Generalmente, la gente sugiere que hagas cosas internamente en cualquier programa/script que estés escribiendo y evites llamadas externas como exec().

Sin embargo, si su objetivo es ejecutar comandos en el sistema, no hay forma de hacerlo sin dicha llamada. Por supuesto, existen riesgos de seguridad, permitir que usuarios aleatorios ejecuten comandos arbitrarios en su servidor genera problemas. Sin embargo, si el acceso a este servidor está severamente restringido, debería poder hacerlo de forma segura.

De todos modos, la conclusión principal es que exec()las funciones no son intrínsecamente malas, simplemente tienden a ser menos eficientes que hacer algo internamente.

información relacionada