Ejecutar un programa externo o no

80 views
Skip to first unread message

Alejandro Exojo

unread,
Jan 2, 2012, 3:49:47 PM1/2/12
to phpbar...@googlegroups.com
Hola.

Tengo que verificar en el servidor una firma hecha en el navegador mediante el
método en JavaScript crypto.signText() (de los navegadores de Mozilla), una
función que devuelve un resultado en PKCS #7. En PHP está la función
openssl_pkcs7_verify(), y es lo que estoy intentando usar, pero ante la
prácticamente nula documentación tanto de la función PHP como de la JS, estoy
empezando a desesperar seriamente.

Me estoy planteando invocar directamente al programa openssl desde el
servidor, en lugar de utilizar el soporte en PHP. Invocar programas externos
siempre es algo delicado por los problemas de seguridad, así que me da cierto
respeto, y quería pedir consejo.

El caso es que openssl_pkcs7_verify() además de estar muy mal documentada,
tampoco es que sea de muy alto nivel que digamos, y no trabaja con datos en
memoria, sino con archivos que hay que generar igualmente. Es otro detalle que
me empuja a pensar que sería razonable invocar a openssl directamente.

Gracias por adelantado.

--
Alex (a.k.a. suy) | GPG ID 0x0B8B0BC2
http://barnacity.net/ | http://disperso.net

Carlos Campderrós

unread,
Jan 3, 2012, 3:18:19 AM1/3/12
to phpbar...@googlegroups.com
Hola,

2012/1/2 Alejandro Exojo <s...@kurly.org>

Me estoy planteando invocar directamente al programa openssl desde el
servidor, en lugar de utilizar el soporte en PHP. Invocar programas externos
siempre es algo delicado por los problemas de seguridad, así que me da cierto
respeto, y quería pedir consejo.

En principio no debe haber ningún problema siempre que escapes adecuadamente todo lo que te llegue del navegador (sean parámetros o ejecutables) con escapeshellcmd() y escapeshellarg(). Y controles que el comando ejecutado termina correctamente. Para ello puedes usar exec() y pasarle un valor como 3er parámetro. Si al volver de la función el 3er parámetro == 0 significa que no ha habido errores.

Eso sí, si puedes usar una función ya existente sería preferible (almenos para mi), aunque viendo lo que comentas sobre la documentación y lo desesperado que estás, igual mejor que tires por la ejecución externa ;-)

saludos,
carlos.

--
Si no puedes deslumbrar con tu sabiduría,
desconcierta con tus gilipolleces
Reply all
Reply to author
Forward
0 new messages