En cualquier manual básico de seguridad en PHP se indica que las instrucciones
allow_url_fopen,
disable_functions y
open_basedir deben ser modificadas para impedir posibles brechas. El problema es que composer utiliza estas directivas de php.ini.
Los posibles errores que nos pueden dar son los siguientes
Phar::mapPhar(): open_basedir restriction in effect.
File(/composer) is not within the allowed path(s)
require(phar://composer.phar/bin/composer): failed to open stream:
phar error: invalid url or non-existent phar "phar://composer.phar/bin/composer"
is_dir(): open_basedir restriction in effect. File(/.composer) is not within the allowed path(s)
Update failed (The Process class relies on proc_open, which is not available on your PHP installation.)
[Symfony\Component\Process\Exception\RuntimeException]
The Process class relies on proc_open, which is not available on your PHP installation.
La forma menos segura para tratar estos errores es poner en peligro nuestra instalación, la forma segura sería generar un script en el cual des-habilitemos estas funciones sólo para la ejecución del comando, ojo, el siguiente script requiere conexión a internet para descargar composer.phar.
#!/bin/bash
#install composer if it's missing
if [ ! -f 'composer.phar' ] ; then
echo "Composer Not Found... installing"
curl -sS https://getcomposer.org/composer.phar > composer.phar
if [ $? -eq 0 ] ; then
echo "Installed!"
else
echo "Composer failed to install!";
exit 1;
fi
fi
#double check
if [ ! -f 'composer.phar' ] ; then
echo "Composer failed to install!";
exit 1;
else
COMPOSER_HOME='/your/path/composer/home' \
COMPOSER_CACHE_DIR='/your/path/composer/cache' \
bash -c "php -d allow_url_fopen=1 \
-d disable_functions= \
-d suhosin.executor.include.whitelist=phar \
composer.phar $@";
fi
rm composer.phar
Este script es una modificación del que podéis encontrar
aquí, agregando la opción
disable_functions y eliminando al final el archivo composer.phar para siempre utilizar la ultima versión y no tenerlo en nuestro código.
Comentarios