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