Re: [PHP-ES] proteccion de codigo

[email protected] (felix gonzales) Tue, 16 Oct 2012 14:18:04 -0500
Newsgroups php.general.es
Message-ID <CA+u4V5S3Dq3Kgm-ZErSqr51OtTCUzMA7U+1o2cmkNXMZOMp+yQ@mail.gmail.com>
intenta con zendguard es de pago pero muy bueno. si lo combinas con
zendserver comunitario.
saludos

2012/10/16 Roberto Barreiro <[email protected]>

> Hola
>
> Que quede claro: estoy totalmente en contra de proteger codigo PHP, creo
> que atenta con la filosofia de software libre ... pero si asi y todo
> quieres hacerlo, no soy quien para decidir por ti .... solo puedo indicarte
> donde puedes tener una solucion ... http://pobs.softonic.com/linux
>
> salu2
>
> El 14 de octubre de 2012 05:09, Pablo Siciliano
> <[email protected]>escribió:
>
> > Hola Juan Carlos,
> >
> > En principio, si hicieras includes y los compilaras es muy posible que no
> > aceptase modularización. Como te dije antes, no use nunca el compilador
> > bcompiler. Pero se me ocurre que podrias llegar a hacer algo con un
> patron
> > factory o strategy para tener tu sistema de modulos.
> > Habria que probarlo bien. Primero probar un escenario simple con
> bcompiler
> > y hacer que todo funcione el ejecutable. Así te vas sacando algunas
> dudas,
> > y empezas a conocer el entorno en general. Luego probar el sistema de
> > modulos en una web adonde tengas el entorno probado con un test simple
> ...
> > Y por ultimo mandarte a escribir un programa compilado con dos modulos
> > sencillos, un HolaMundoModule y un AdiosMundoModule.
> >
> > No se para que estas planeando usar tu sistema de modulos. Pero te cuento
> > como haria uno para un uso como el que se me ocurre que podrias darle. En
> > mi ejemplo, voy a hacer un script, que lo que haga sea ejecutar modulos
> > cargados por un csv uno atras de otro. Voy a "programar" directo en el
> > mail, asi que te pido que por favor seas indulgente con la sintaxis y los
> > errores que pueda tener, seguramente vas a tener que trabajar un rato
> para
> > que corra, ademas de que por algun lado es posible que se me cuele la
> > sintaxis de objetos de algun otro lenguaje.
> >
> >
> >
> >
> > /**
> > *
> > * Supuestos: tengo un sub directorio conf en el mismo directorio adonde
> > corre mi programa, que contiene un archivo *llamado modules.csv. La
> > estructura que este archivo va a tener va a ser: path completo del
> archivo
> > con el modulo (En *linux un /path/modulo.so, en windows supongo que algo
> de
> > la pinta c:\modulos\modulo.dll, segundo campo separado por punto y coma
> el
> > nombre del modulo, el tercero el nombre de la clase y el  cuarto campo
> > separado por punto y coma otro separado por pipes, que contenga
> > variable1=valor1|variable2=valor2|...|variablen=valorn. De esta forma
> podes
> > jugar con usar el mismo modulo varias veces.
> > *
> > */
> >
> > /**
> > * Empieza Modularizable.class.php
> > */
> > interface Modularizable
> > {
> >      function validate();
> >      function execute($args);
> >      function setArgs($pipeSeparatedHash);
> > }
> >
> >
> > /**
> > * Empieza Modulo.class.php
> > */
> > abstract class Modulo
> > {
> >
> >     protected $moduleName;
> >     protected $args;
> >
> >     function __construct($moduleName,$args)
> >     {
> >         $this->moduleName=$moduleName;
> >         $this->args=$args;
> >
> >     }
> >
> >
> >     function validate()
> >     {
> >          print "pase por la validacion y por default devuelvo siempre
> > true";
> >          return TRUE;
> >     }
> >
> >     function execute()
> >     {
> >        print "Hace el execute de ejemplo";
> >        print_r($this->args);
> >     }
> > }
> >
> > /**
> > * Empieza ModuleConfig.class.php
> > */
> > class ModuleConfig
> > {
> >    private $className;
> >    private $moduleName;
> >    private $moduleFile;
> >    private $args;
> >
> >    function __construct($className,$moduleName,$moduleFile,$argsStr)
> >    {
> >         $this->className=$className;
> >         $this->moduleName=$moduleName;
> >         $this->moduleFile=$moduleFile;
> >         $arr=explode("|",$argsStr);
> >         for($i=0;$i<count($arr);$i++)
> >         {
> >                $arr2=explode("=",$arr[$i]);
> >                $this->args[$arr2[0]]=$arr2[1];
> >         }
> >    }
> >
> >    private isLoaded()
> >    {
> >      return extension_loaded($this->moduleName);
> >    }
> >
> >    private function load()
> >     {
> >        $ret=false;
> >        if(!extension_loaded($this->moduleName)
> > && file_exists($this->moduleFile))$ret=dl($this->moduleFile);
> >        return $ret;
> >     }
> >
> >    function getInstance()
> >    {
> >        $cargo=$this->load();
> >        if(!$this->isLoaded()) return null;
> >        $class=$this->className;
> >        return new $$class($this->moduleName,$this->args);
> >    }
> > }
> >
> > /**
> > * empieza ModuleFactory.class.php
> > */
> >
> > class ModuleFactory
> > {
> >
> >     private static $configFile=dirname(__FILE__)."/conf/modules.csv";
> >     private static $configs=array();
> >
> >
> >
> >
> >      private static function fillModulesFromConfig()
> >      {
> >
> >                   $arch=fopen($configFile,"r");
> >                   if($arch!==FALSE)
> >                   {
> >                       while(($cfg=fgetcsv($arch,2048,";"))!==FALSE)
> >                       {
> >                                      $moduleFile=$cfg[0];
> >                                      $moduleName=$cfg[1];
> >
> >                                      $className=$cfg[2];
> >                                      $argsStr=$cfg[4];
> >
> >  ModuleFactory::load($moduleName,$moduleFile);
> >                                      $self::configs[]=new
> > Config($moduleFile,$moduleName,$className,$argsStr);
> >                       }
> >                   }
> >
> >      }
> >
> >
> >
> >      static function getModule($index)
> >      {
> >          if(count(self::configs)==0)
> > ModuleFactory::fillModulesFromConfig();
> >          $cfg=self::configs[$index];
> >          return $cfg->getInstance();
> >      }
> >
> >      static function executeModules()
> >      {
> >         for($i=0;$i<count(self::configs);$i++)
> >         {
> >             $module=self::getModule($i);
> >             $module->execute();
> >         }
> >      }
> >
> > }
> >
> > /**
> > * Empieza HolaMundoModule.class.php
> > */
> > class HolaMundoModulo Extends Modulo
> > {
> >
> >        function validate()
> >        {
> >           print "Valida Hola!!!";
> >           return true;
> >        }
> >
> >        function execute()
> >        {
> >            print "Hola Mundo!!";
> >            print " Argumentos:";
> >            print_r($this->args);
> >        }
> >
> > }
> >
> > /**
> > * Empieza AdiosMundoModulo.class.php
> > */
> > class AdiosMundoModulo extends Modulo
> > {
> >
> >        function validate()
> >        {
> >           print "Valida Adios :( :( :(";
> >           return true;
> >        }
> >
> >        function execute()
> >        {
> >            print "Adios Mundo :( :(";
> >            print " Argumentos:";
> >            print_r($this->args);
> >        }
> >
> > }
> >
> >
> > Por último, deberías incluirte todos los archivos php (O so o dll, según
> > estes probando y sea el caso) y deberías hacer un
> >
> > ModulesFactory::executeModules();
> >
> > Eso te los ejecutaría en orden, con parámetros y clases repetidas. En
> caso
> > de que solo quisieras usarlo como un sencillo Factory, podrías escribirte
> > una rutina que se llame getInstance en ModulesFactory, que tome un nombre
> > de clase, recorra los configs hasta dar con uno que tenga el mismo que
> > estas buscando, lo instancie y lo devuelva.
> >
> > Hay un par de cosas que podría un poco con la que tal vez tengas que
> > luchar, la primera que se me ocurre es como la forma en la que estoy
> > manejando el array estatico de configs. Por ahi tengas que escribir esa
> > clase como no abstracta, pero lo mejor es que no, al fin y al cabo es
> algo
> > similar a un Factory.
> >
> > Te paso ademas unos links que revise para escribirlo, tal vez tambien te
> > sirvan de ayuda.
> >
> >
> >
> http://www.alessiomavica.com/es/2011/09/12/interface-abstract-class-php-castellano/
> > http://php.net/manual/en/function.dl.php
> >
> >
> http://www.cristalab.com/tutoriales/crear-e-implementar-el-patron-de-diseno-singleton-en-php-c256l/
> >
> > Saludos!
> > Pablo.
> >
> > PD: La programacion orientada a objetos en php es una gran cosa :)
> >
> >
> > 2012/10/13 juan carlos rebate <[email protected]>
> >
> > >  algo asi hace real software con sus aplicaciones web permite cimpilar
> > > aplicaciones web en cgi y standalone que puede ser todo php o usar el
> > > lenguaje propio si es buena idea pablo pero si se compila la app no
> > > aceptaria complementos o addons en el caso de que yo desarrolle alguno
> o
> > si?
> > >
> > > > Date: Sat, 13 Oct 2012 08:26:07 -0300
> > > > From: [email protected]
> > > > To: [email protected]
> > > > CC: [email protected]
> > > > Subject: Re: [PHP-ES] proteccion de codigo
> > >
> > > >
> > > > Hola!
> > > >
> > > > Que tal el compilador bcompiler?
> > > >
> > > > http://pecl.php.net/package/bcompiler
> > > >
> > > > Nunca lo use, pero es un proyecto que esta hace años, es parte de
> PECL,
> > > es
> > > > gratuito ... Y según las especificaciones debería funcionar para php
> 4
> > o
> > > > superior.
> > > >
> > > > Saludos!
> > > >
> > > > 2012/10/11 juan carlos rebate <[email protected]>
> > > >
> > > > >
> > > > > hola no se si es aqui donde me tengo que dirigir ya que en los
> foros
> > > como
> > > > > forosdelweb no me responden el caso es el siguiente uso php 5.3 y
> me
> > > han
> > > > > pedido desarrollar una aplicacion tipo cms de gestion escolar se
> > > tratara de
> > > > > software comercial el instituto para el que va dirigido el software
> > > esta de
> > > > > acuerdo en serlo pero no quiero entregarlo sin proteger el codigo
> por
> > > la
> > > > > web solo encuentro como proteger el codigo con javascript pero eso
> no
> > > tiene
> > > > > sentido porque el codigo que se veria seria html generado lo que yo
> > > quiero
> > > > > es ocultar o proteger el codigo no puedo usar incuve ya que
> necesito
> > > > > tenerlo instalado en el servidor tampoco puedo usar zend guard
> porque
> > > solo
> > > > > funciona con php 5.2 ademas de que es demasiado caro he probado con
> > > varios
> > > > > ofuscadores pero todos ellos producen errores en el funncionamiento
> > del
> > > > > sistema ¿habria otro medio de proteger el codigo? quiza creando un
> > > binario
> > > > > con apache php y mi sistema? se que se puede hacer ya que otras
> > > compañias
> > > > > ofrecen editores que lo permiten gracias de ante mano por la ayuda
> > > > >
> > >
> >
>



-- 
Felix Gonzales