Otro problema con las llamadas al sistema en un entorno de alojamiento compartido es que el procesador PHP (apache / mod_php) probablemente sea ejecutado por un usuario con permisos diferentes / más que su cuenta (por ejemplo, puede vincularse para escuchar los mensajes TCP entrantes en el puerto 80, leer los archivos de cada usuario de host compartido).
Cuando inicia sesión en un alojamiento compartido y tiene acceso a la línea de comandos, es un usuario con privilegios mínimos (solo edite sus propios archivos e inicie / detenga a sus trabajadores de MPM de Apache). Por lo tanto, se podría usar system
llamado desde php como una forma de escalada de privilegios (por ejemplo, espiar a otros usuarios en el alojamiento compartido).
Además, es una práctica insegura utilizar las llamadas eval
/ system
en programas seguros, especialmente cuando el comando para eval
/ system
se construye a partir del procesamiento de cadenas que es fácilmente inyectable. Por ejemplo, podría tener un comando eval("mkdir $user_input");
, pero un atacante podría cambiar $user_input="blank; rm -rf *"
, lo que posiblemente podría eliminar algunos archivos importantes. Las llamadas existen para simplificar la vida cuando la seguridad no es un problema (por ejemplo, es un script local ejecutado por usted solo en su propio ordenador).
Casi siempre hay una mejor manera de realizar la misma tarea. Tal vez su idioma tenga comandos personalizados que solo pueden ejecutar llamadas específicas del sistema; por ejemplo, python tiene os.mkdir
(no estoy familiarizado con PHP). O tal vez el lenguaje tiene una forma de evaluación más segura que no tiene una forma inyectable (de manera análoga a cómo los parámetros enlazados vencen a la inyección de SQL). Por ejemplo, python tiene subprocess donde subprocess.call(['mkdir', new_dir_name])
no es susceptible a la inyección de shell (incluso con espacios dentro de new_dir_name todavía será tratado como un solo argumento de mkdir
por el shell).
Quizás necesite una operación compleja del sistema de archivos cada vez que un usuario realice una acción. En ese caso, configuré un script que escucha los trabajos que se agregan a una cola en una base de datos y luego ejecuta esas tareas desde su cuenta de usuario. Asegúrese de desinfectar la entrada que ingresa a su base de datos (para que sus tareas no sean de inyección de concha).