Re: [PHP-ES] proteccion de codigo

[email protected] (Roberto Barreiro) Tue, 16 Oct 2012 20:19:59 +0200
Newsgroups php.general.es
Message-ID <CAKYOtPczwZsK6jqeCemeWPcv9QSPos5ByXszdwUVAHKEzMOG-Q@mail.gmail.com>
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
> > > >
> >
>