Aviso: El autor de esta respuesta está afiliado a ionCube. Tenga en cuenta que las respuestas y los comentarios enviados por los empleados de ionCube, aunque con buena intención, pueden estar sujetos a conflictos de interés.
Las respuestas aquí son buenas, aunque pensamientos como "cualquier cliente entrometido no tendría muchos problemas para extraer la clave de cifrado de su código compilado" se alarga un poco porque los usuarios finales e incluso la mayoría de los desarrolladores de PHP carecen del conocimiento requerido en términos de modificar el motor de PHP para exponer datos de tiempo de ejecución de cualquier manera útil.
La protección de bytecode se basa en la compilación de código en un idioma diferente, el bytecode, y realiza los mejores esfuerzos para hacer que el bytecode y los metadatos sean difíciles y costosos de descubrir, así como para comprender si uno lo obtiene. ionCube compila el código, usa varias técnicas para proteger el bytecode y usa un motor de ejecución PHP no estándar para poder usar el bytecode que difiere del bytecode que PHP normalmente produciría. Esto explica el tamaño relativamente grande del componente del cargador en tiempo de ejecución en comparación con el mismo de otras soluciones.
El uso de funciones de PHP como get_defined_vars()
que usted menciona puede no ser posible porque los archivos pueden codificarse para que funcionen solo con archivos codificados producidos por la misma copia del codificador, y fallar si un archivo codificado fue reemplazado por Uno no codificado. De manera similar, el uso de la ofuscación de variables puede alterar los resultados de tales funciones.
Sin embargo, hay limitaciones a lo que es posible con PHP de fuente abierta, así como compensaciones para equilibrar el objetivo de la protección con el rendimiento en tiempo de ejecución y la compatibilidad con las instalaciones estándar, en particular, los servidores compartidos. Mientras que las contraseñas de mysqli_connect()
, por ejemplo, pueden estar bien protegidas, un pirata informático podría modificar la biblioteca mysql o el contenedor de la biblioteca mysqli de PHP y recompilar PHP para exponer la contraseña en tiempo de ejecución. Sin embargo, esto puede no ser un problema en la práctica, y si lo fuera, hay formas de aumentar la seguridad siempre que no sea necesaria la compatibilidad con las instalaciones predeterminadas de PHP. Se recomienda ponerse en contacto con ionCube para obtener información sobre las estrategias que mejor se adapten a su caso de uso, y es posible que descubra posibilidades no publicitadas de las que no estaría al tanto.