Avisos
Vaciar todo

Configurar función escapeshellcmd() en phpmailer para recibir datos formulario BreezingForms  

 
Jesus
 Jesus
Usuario activo

Buenos días a todos,
Tengo terminado el desarrollo de un formulario BreezingForms desde Joomla, para que un cliente nos pueda enviar determinadas informaciones y ficheros.
Cuando realizamos las pruebas desde nuestros ordenadores todo funciona correctamente, pero cuando intenta enviar el cliente recibe el error de "Error en el Envío" y no recibimos los datos (esto lo tenemos programado en el formulario mediante un Javascript que, en caso de que el estado sea diferente a cero proporcione este error).
Revisando los ficheros de LOG vemos la siguiente línea:
[18-Apr-2018 18:44:31 Europe/Berlin] PHP Warning: escapeshellcmd() has been disabled for security reasons in /home2/qipertc2/public_html/codigolei/libraries/vendor/phpmailer/phpmailer/class.phpmailer.php on line 1444

He abierto un ticket por este problema y la respuesta es que Webempresa tiene deshabilitada, por motivos de seguridad, la función escapeshellcmd(), y que abra un post para ver si me pueden ayudar a configurar el componente de BreezingForms.

Agradezco cualquiera ayuda que puedan prestarme. Gracias.

URL del sitio: Contenido solo visible a usuarios registrados

Citar
Respondido : 19/04/2018 11:06 am
Pepe
 Pepe
Soporte CMS Webempresa Admin

Hola Jesus.

Si funciona en vuestros equipos tiene que funcionar en el del Usuario ¿ Desde donde se conecta ese usuario ? ¿ se conecta desde países de habla no hispana ? ¿ Le comentaste que probara desde otros navegadores ?

la función que comentas esta desestabilizada en todos nuestros servidores , como te comentan por seguridad.

Puedes probar lo siguiente:
.- accede a tu cuenta de cPanel -> Administrador de Archivos
.- Edita el archivo class.phpmailer.php que encontraras en la ruta libraries -> vendor -> phpmailer -> phpmailer -> class.phpmailer.php
.- Sobre la linea 1445 veras el siguiente código:

 or !in_array(escapeshellarg($string), array("'$string'",

.- Modifica el código por lo siguiente:

or !in_array(@escapeshellarg($string), array("'$string'",

Como veras solo añadimos una @ a la variable escapeshellarg

Nota: recuerda realizar una copia del archivo antes de codificarlo.

Revisa si con eso se soluciona el tema del aviso.

Un saludo

ResponderCitar
Respondido : 19/04/2018 12:46 pm

Cursos Gratuitos WordPress

Jesus
 Jesus
Usuario activo

Buenos días Pepe,

Hemos modificado el fichero php.ini tal como nos indicas y mi cliente ha vuelto a probar a realizar el envío, pero sigue con el mismo problema.
Una pregunta: si la función que falla es escapeshellcmd, ¿no habría que añadirle la @ a esta función en vez de a escapeshellarg?.
Por otra parte, ¿se puede deshabilitar esta función escapeshellcmd?.
Muchas gracias por tu ayuda.

ResponderCitar
Respondido : 20/04/2018 10:07 am
Jhon
 Jhon
Soporte CMS Webempresa Moderator

Hola

Cómo tienes configurado Configuración Global > Servidor > Configuración de correo ?, envía una captura de pantalla. Tienes alguna extensión relacionado con envío de correos adicional?

Te lo comento porque si tienes configurado lo que viene por defecto con Joomla entonces no deberías tener problema.

En todo caso, busca esta función que se reporta y simplemente quitala, pero deja el string, si tienes dudas envía una captura de pantalla de la línea 1444

La función lo que hace es una comprobación si el parametro o parámetros enviados son correctos

Saludos.

ResponderCitar
Respondido : 20/04/2018 6:15 pm

wpdoctor-revisa-la-salud-de-tu-wordpress

Jesus
 Jesus
Usuario activo

Buenos días Jhon,
La configuración de correo que hemos estado utilizando es la que trae Joomla por defecto (ahora mismo la he cambiado a SMTP para que mi cliente pueda probar hoy a enviar el formulario).
En cuanto al código del fichero class.phpmailer.php original, en la línea donde da el error, lo adjunto en una imagen y lo pego a continuación:
protected static function isShellSafe($string)
{
// Future-proof
if (escapeshellcmd($string) !== $string
or !in_array(escapeshellarg($string), array("'$string'", ""$string""))
) {
return false;
}
¿Para deshabilitar la función escapeshellcmd simplemente debería quitar la primera parte del if?.

Muchas gracias por la ayuda.
Un saludo.

ResponderCitar
Respondido : 23/04/2018 9:53 am
Pepe
 Pepe
Soporte CMS Webempresa Admin

Hola Jesus.

Tienes que eliminar toda la función. Si no quieres eliminar todo el bloque lo que puedes hacer es dejarlo como comentario con lo que no tendría ningún efecto:

// Future-proof
// if (escapeshellcmd($string) !== $string
// or !in_array(escapeshellarg($string), array("'$string'", ""$string""))
// ) {
// return false;
// }

Un Saludo

ResponderCitar
Respondido : 23/04/2018 10:13 am

Jesus
 Jesus
Usuario activo

Buenas tardes a todos,
Lo primero darle las gracias a Pepe y a Jhon por su inestimable ayuda.
Por fin he podido aclarar el problema con mi cliente, haciendo el proceso paso a paso desde su ordenador, y he descubierto que el problema del no envío se debía a que intentaba adjuntar un documento Word docx, extensión que no estaba contemplada. En este caso no recibía el mensaje adecuado de extensión no permitida (usa el I.E. 11). He habilitado este tipo de archivos y todo ha funcionado correctamente.
De todas formas he dejado desactivado el complemento (que es lo que yo veía en el log como que daba problemas).

Un saludo.

ResponderCitar
Respondido : 25/04/2018 3:43 pm
Pepe
 Pepe
Soporte CMS Webempresa Admin

Hola jesus.

Genial !!! me alegra que lo solucionaras :cheer:

Muchas veces nos ofuscamos en algo y empezamos a dar vueltas y resulta que al final el problema esta en el lado del cliente, sobre todo cuando se trata de correos 😉

El Tema de las extensiones no permitidas se puede solucionar simplemente comprimiendo en archivo en un zip.

Gracias por informarnos y aportar la solución 😉

Cerramos el tema

un saludo

ResponderCitar
Respondido : 25/04/2018 4:00 pm

optimiza-automaticamente-todas-las-imagenes-de-tu-wordpress