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 > > > > > > >