You are on page 1of 23

THE ORIGINAL HACKER

SOFTWARE LIBRE, HACKING y PROGRAMA-


CIN, EN UN PROYECTO DE
EUGENIA BAHIT

@eugen!"!#$
GLAMP HACKER Y
PROGRAMADORA E%TREMA
HACKER ESPECIALI&ADA EN PROGRAMACIN
E%TREMA E INGENIER'A IN(ERSA DE CDIGO
SOBRE GNU)LINU%, APACHE, MYS*L,
PYTHON Y PHP+ EUGENIABAHIT+COM
DOCENTE E INSTRUCTORA DE TECNOLOG'AS
GLAMP CURSOS+EUGENIABAHIT+COM
CURSOSDEPROGRAMACIONADISTANCIA+COM
MIEMBRO DE LA FREE SOFTWARE
FOUNDATION FSF+ORG Y THE LINU%
FOUNDATION LINU%FOUNDATION+ORG+
CREADORA DE PYTHON-PRINTR, EUROPIO
ENGINE, ,ACKTHESTRIPPER+ (IM CONTRI-
BUTOR+ FUNDADORA DE HACKERS N-
DE(ELOPERS MAGA&INE Y RESPONSABLE
EDITORIAL HASTA OCTUBRE -./+

Buen01 A2e1, /3 4e ,un0


4e 53.6
'NDICE DE LA
EDICIN NRO7
EUROPIO ENGINE LAB8 URL CUSTOMI&ABLES Y SLUGS
EN EUROPIO ENGINE++++++++++++++++++++++++++++/
INGENIER'A DE SOFTWARE Y ESTRUCTURAS DE
DIRECTORIOS DEFINITI(AS EN APLICACIONES M(C
MODULARES++++++++++++++++++++++++++++++++++++7
HACK PARA EMULAR LA AUTOCARGA Y DESACTI(ACIN
DE MDULOS DE UN SISTEMA COMO POL'TICA DE
EMERGENCIA FRENTE A FALLOS INESPERADOS+++++++.6
ESE CAPTCHA NO (ERIFICA A LOS HUMANOS, SINO
*UE COMPRUEBA SU MIOP'A+++++++++++++++++++++.9
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
3
EUROPIO ENGINE LAB8
URL CUSTOMI&ABLES Y
SLUGS EN EUROPIO ENGINE
LLE(ABA TIEMPO ,IMMY
COMENT:NDOME LA NECESIDAD
DE CREAR URLS
PERSONALI&ADAS EN EUROPIO
ENGINE YA *UE ES UNO DE
LOS RE*UERIMIENTOS M:S
USADOS EN EL FRONT-END
DE LA MAYOR PARTE DE LAS
APLICACIONES WEB+ UNOS
MESES ATR:S DECID'
IMPLEMENTAR UN SISTEMA
PARA EL CUAL ME INSPIR;
EN EL DE D,ANGO Y PARA
MI SORPRESA, AL D'A DE
HOY SE CON(IRTI EN LA
CARACTER'STICA M:S
POPULAR DEL ENGINE+
ace algunas revisiones atrs, incorpor en Europio Engine
un sistema de URL personaliadas !ue utilian e"presiones
regulares para la de#inici$n de slugs. %
Esta idea &!ue como tantas otras surgi$ del ingenio de 'imm( )aniel
Barranco& se convirti$ en los *ltimos + meses en una de las
caracter,sticas ms populares del motor ( por tanto, en una de las
ms consultadas.
Es por ello !ue en esta entrega e"plicar como implementar dicha
caracter,stica en las aplicaciones ( como generar slugs -E.&
compatibles, aprovechando la ocasi$n para hablarles sobre algunos
hacks incre,bles.
COMEN&AR A UTILI&AR URL PERSONALI&ADAS
Lo primero !ue debemos hacer es crear un archivo llamado urls.php en la ra, de la aplicaci$n. Es
importante saber !ue este archivo no es sustituido ni reemplaado de ninguna #orma cuando el core de
Europio Engine es actualiado mediante el updater
1
.
Trason!o
El contenido de este archivo es ejecutado como c$digo en estado puro por el enrutador de
ApplicationHandler mediante eval. El enrutador utilia el constructor eval
2
del lenguaje
&destinado originalmente a evaluar c$digo& como hack para evitar el uso de global ( la
creaci$n de variables globales.
/ http011www.cursosdeprogramacionadistancia.com1pastebin1codigo#uente1ver1/2
+ http011www.php.net1manual1es1#unction.eval.php
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
4
El archivo urls.php no debe contar con eti!uetas de apertura ni cierre. -olo debe contener una variable
llamada $urls cu(o valor se un array0
$urls = array();
FUNCIONAMIENTO DEL ARRAY <URLS
-e trata de un array asociativo cu(as claves sern e"presiones regulares !ue de#inan los slugs personaliados
( sus valores asociados, la verdadera URL cu(o recurso se desee mostrar al usuario.
Un ejemplo sencillo, plantea la como slug la e"presi$n regular del literal de 1productos para mostrar al usuario
el recurso listar del modelo Producto perteneciente al m$dulo de ventas0
$urls = array(
"/^\/productos$/" => "/ventas/producto/listar"
);
-eg*n el array anterior, los usuarios !ue accediesen a examples.org/productos llegar,an al mismo
recurso !ue accediendo a travs de example.org/ventas/producto/listar
Ejemplos un poco ms complejos, podr,an re!uerir argumentos #ijos0
$urls = array(
"/^\/ofertas/" => "/ventas/producto/ver/ofertas"
);
. variables0
$urls = array(
"/!/producto\/[0-9|a-z|A-Z|\-]{1,}/" => "/ventas/producto/ver"
);
En cual!uier caso, todo el slug ser pasado como parmetro al recurso dentro de un array. Los elementos de
dicho array sern cada una de las partes obtenidas tras el anlisis sintctico 3parsing4 de la URL, el cul
tomar la barra diagonal 3slash4 como parmetro divisor de la UR5.
)e esta #orma, si el slug resultante se viese como este0
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
5
example.org/user/ua!"01#
6roducir,a el siguiente array0
array("user"# "$uan2%&'")
Entonces, si hubiese estado de#inido como0
$urls = array(
"/!/user\/[0-9|a-z|A-Z]{1,}/" => "/usuarios/user/ver"
);
El Application Handler llamar,a al recurso ver del modelo user perteneciente al m$dulo de usuarios, siendo
dicha llamada e!uivalente a0
$slug(data = array("user"# "$uan2%&'");
$controlador = ne) *ser+ontroller();
$controlador,>$er%$slu&'data(;
=CUANDO SE ACTI(A>
El enrutador del Application Handler, siempre intentar, en primera instancia, invocar a un m$dulo&modelo&
recurso. -olo cuando la UR5 est mal #ormada o sea ine"istente, se #ijar si e"iste un archivo llamado urls.php
en la ra, de la aplicaci$n ( comprobar si la UR5 recibida coincide con alguna de las claves del arra(.
El enrutador considera !ue una "#$ est% &ien orma!a si res'eta e( ormato
/)*dulo/)odelo/recurso-.argumento/. 7oda UR5 !ue no respete dicho #ormato, ser considera UR5 mal
#ormada.
SLUG HACK
MOSTRAR UNA (ISTA POR DEFECTO SIN REDIRECCIONAMIENTO
En el array $urls se debe crear la siguiente e"presi$n regular0
$urls = array(
"/!/$/" => "/ruta/a/vista/por/de0ecto"
);
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
6
Luego, en la secci$n 1PP23+14356 del archivo con0ig.ini de la aplicaci$n, se debe establecer el valor de
la directiva 7891*24(:38; en 1
7891*24(:38; = /
RECUPERAR UN OB,ETO A PARTIR DE UN SLUG SIN CONTAR CON SU ID
6uede ser el caso de una UR5 #ormada solo por la denominaci$n de un determinado objeto, como en el ejemplo
del usuario /user/$uan2%&'. En un caso como este, en el controlador puede emplearse a )ata%andler
8
para
recuperar al objeto sin contar con su 5), utiliando el mtodo #ilter.
0unction ver($data=array()) <
$opt = array("0lags"=>93248=(921>(?4=3P(@3>@);
$user = isset($data-&/) A 0ilter(var($data-&/# 93248=(?16343B8(?P8+312(+@1=?# $opt) C "";
$oD$(user = +atta,a!dler%-user-, +,'/012A3'045673(-8f9lter%:!a)e;$user:(<
#...
E
Hagamos la diferencia
Estudiantes de sistemas de todo el mundo de habla hispana, cuentan
con mi(es !e recursos (i&res para enri!uecerse pro#esionalmente
!ue so(o son 'osi&(es 'or e( esuer)o * !e!icaci+n !e ,ui-nes
'onemos nuestro conocimiento a( servicio !e (a comuni!a!.
6or m,nima !ue sea tu donaci$n, me a(udas a continuar aportando conocimiento a todos los
estudiantes ( pro#esionales de sistema !ue lo necesitan para el #uturo de sus carreras.
Entre todos, PODEMOS hacer una gran diferencia

The .rigina( /ac0er La revista 3edici$n mensual en 6)94
The .rigina( /ac0er 1i&rar* Biblioteca de recursos para estudiantes de in#ormtica
Euro'io Engine :otor de so#tware para aplicaciones :;< modulares en 6%6
2ac0TheStri''er Deployer para servidores con n#asis en seguridad
8 ;er art,culo sobre 3mani'u(aci+n !e !atos con 4ata/an!(er5 en The .rigina( /ac0er N67 descargando el paper desde
este enlace0 http011librar(.originalhac=er.org1search1datahandler
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
7
INGENIER'A DE SOFTWARE Y
ESTRUCTURAS DE
DIRECTORIOS DEFINITI(AS
EN APLICACIONES M(C
MODULARES
LO PADEC' DURANTE A?OS+
DURANTE A?OS ME DEDI*U;
A IN(ESTIGAR Y TRATAR DE
DESCUBRIR UN ES*UELETO
*UE RESULTASE TAN PTIMO
COMO IRREFUTABLE+ LA
CREACIN DE EUROPIO
ENGINE ME AYUD MUCHO EN
EL HALLA&GO DE UNA
RESPUESTA Y AHORA, TRAS
DOS A?OS DE
CONSTANTES PRUEBAS
SOBRE ALGO M:S DE 73
APLICACIONES CREADAS,
PUEDO CONTARLES MI
PROPUESTA SIN MIEDO A
COMETER ERRORES+
nredos, desprolijidades, decisiones >provisorias para
siempre?, son solo algunas de las tantas causas !ue
generan el malestar ( la desesperaci$n !ue todo
programador padece de #orma permanente en su carrera como
desarrollador de -o#tware ( a pesar de haber le,do los mejores
libros, estudiado con los mejores docentes, seguido los mejores
consejos ( haberse mantenido actualiado sobre los *ltimos
avances en tecnolog,a, la desgastante sensaci$n nunca
desaparece.
E
6arece una introducci$n ir$nica, casi sarcstica, pero no lo es. Es la
pura realidad !ue vivo d,a a d,a cuando reviso alg*n c$digo en
@it%ub, intento hacer algo de ingenier,a inversa sobre alguna app o
simplemente escucho padecer a mis alumnos. 6ues (a
organi)aci+n !e( c+!igo uente, (a estructura interna !e una
a'(icaci+n * su es,ue(eto, re'resentan e( 809 !e( -:ito !e
una a'(icaci+n. A si alguna de estas #alla, el #racaso del -o#tware
es un hecho inminente.
LA IMPORTANCIA CONTAR CON UN SISTEMA BIEN
ORGANI&ADO
Las bases de una aplicaci$n modular, no son solo un #ormalismo
tcnico de moda. 6or consiguiente, sus principios de 'orta&i(i!a!,
enca'su(aci+n e in!e'en!encia, deben ser respetados sin
margen de error.
Un sistema modular es a!uel !ue se compone de un n*mero desconocido de aplicaciones denominadas
>m$dulos? ( !ue permite la incorporaci$n o eliminaci$n de un m$dulo sin alterar en absoluto las aplicaciones
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
8
restantes. )e esta #orma, un sistema modular !ue ho( cuenta con un m$dulo de ventas ( otro de costos,
maBana podr contar con un m$dulo e"tra de seguridad social sin !ue los m$dulos de ventas ( costos se vean
a#ectados.
6or otra parte, es norma inviolable, !ue un sistema modular cuente con un n*cleo independiente, !ue pueda
mantenerse, actualiarse ( modi#icarse sin !ue ello a#ecte a los m$dulos del sistema.
6or supuesto !ue todo esto no se logra solo con una estructura interna coherente. 6ero igual de cierto es, !ue
contar con un es!ueleto irre#utable, nos soluciona el CDE del problema.
PROPUESTA ESTRUCTURAL
<omo coment al principio, tras un largo per,odo de pruebas e investigaciones, logr dar con una estructura
!ue al momento, a demostrado dar los mejores resultados. Esta estructura !ue propongo no es nueva. 6arte
de ella puede verse sugerida por grandes autores como ;artin <o=(er
4
( aplicada por numerosos
frameworks en di#erentes lenguajes. Ao simplemente he tomado esta ar!uitectura ( he creado un h,brido !ue
toma lo mejor de sta sumando unos to!ues propios mu( sutiles.
E"teriormente, el es,ue(eto estructura( !e un sistema mo!u(ar ;>C 3independientemente del lenguaje
con el !ue se encuentre creado4, deber,a verse e"actamente como el siguiente 3algunos nombres pueden
variar40
.
FGG appsH Aqu se almacenarn todas las aplicaciones (mdulos) del sistema
FGG common
I FGG custom
I JGG liDs
FGG core
FGG staticH Destinado al almacenamiento de archivos estticos
JGG tests
Los asteriscos F indican !ue el nombre del directorio puede variar
SOBRE LOS NOMBRES (ARIABLES
El directorio apps tiene por objetivo el almacenamiento de los m$dulos del sistema 3ms adelante veremos su
estructura interna4. 6or lo tanto, nombres como applications ( modules tambin son vlidos. Es
importante !ue se conserve un nombre el plural, puesto !ue la estructura de directorios de un sistema, es
tambin una #orma de documentaci$n. Los nombres en ingls representan una sugerencia universal !ue
puede ser bien entendida por cual!uier programador1a independientemente de su nacionalidad o procedencia.
El directorio stat9c debe ser una carpeta #cilmente trasladable 3portable4 cu(o *nico objetivo sea el
almacenamiento de archivos estticos inherentes a la @U5 del sistema. 6or lo tanto, admitir nombres tales
como media, site(media, static(server, etc. dependiendo del tratamiento !ue dicho directorio #uese a
tener.
G http011www.martin#owler.com
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
9
static
FGG css
FGG html
FGG img
FGG $s
s=-ad)9!-$" FGG
s>!tha?hl JGG
En el ejemplo anterior, los directorios sD,admin,v2 ( synthaxhl corresponden a librer,as de terceros ( por
lo tanto, su estructura interna ha sido conservada.
SOBRE LA FINALIDAD DE LOS DIRECTORIOS
La #inalidad de las carpetas apps ( static #ue e"plicada anteriormente. <on respecto a las restantes, nos
encontramos con los directorios common ( core, los principales del sistemas ( por ello es mu( importante
entender la di#erencia entre ambos.
El directorio core tiene como *nica #inalidad el almacenamiento de archivos ( librer,as del n*cleo de la
aplicaci$n. -on archivos del n*cleo, todos a!uellos !ue resulten in!is'ensa&(es 'ara e( arran,ue *
uncionamiento !e( sistema ( !ue a la ve 'ue!an ser 'orta!os a otro sistema sin re,uerir
mo!iicaciones. -i un archivo del core re!uiriese un m,nimo cambio para servir a otro aplicaci$n, ser,a un
error !ue podr,a deberse a0
La necesidad de generar una directiva de con#iguraci$n variableH
La necesidad de mover el archivo #uera del n*cleoH
El directorio co))o! suele ser similar al directorio core en el sentido de !ue todo el sistema necesita de l
para #uncionar. -in embargo, a pesar de su naturalea esencial, todos los archivos son comunes al sistema en
el !ue se encuentran pero su portabilidad hacia otro sistema ser,a imposible. Es decir, !ue se trata de
archivos * (i&rer?as comunes a( sistema ,ue (os contiene 'ero no a otro, incluso aun!ue la similitud
entre dos o ms sistemas se vea a#ectada por la casualidad de dicha similitud, a reutiliar archivos de un
common.
9inalmente nos encontramos con la carpeta tests, claramente destinada a las pruebas unitarias del sistema.
Es sumamente importante !ue aun!ue el e!uipo de desarrollo a*n no ha(a logrado implementar tcnicas de
programaci$n avanadas como 7)) o pruebas unitarias, inclu(a esta carpeta en los sistemas !ue diseBe,
pues servir en un #uturo al tiempo !ue sirve como #orma de respuesta rpida a si se cuenta o no con tests. Il
ver esa carpeta vac,a, con una sola vista rpida, el programador podr saber !ue el sistema no cuenta con
pruebas unitarias ( !ue no ha sido desarrollado mediante 7)).
DIRECTORIOS POR DENTRO
La estructura interna de cada directorio, var,a de acuerdo al mismo ( a #actores inherentes al pro(ecto. -in
embargo, ciertas normas ( sub&carpetas debern ser respetadas como se describe a continuaci$n. <omenar
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
10
por lo ms simple e ir hacia lo ms complejo.
Lo ms aconsejable para el directorio tests es !ue ste repli!ue la misma estructura de directorios !ue la del
-U7. Esto permitir !ue al momento de empa!uetar el sistema para su distribuci$n, puedan suprimirse los
tests sin ms es#uero !ue eliminar el directorio correspondiente.
La estructura interna del directorio stat9c debe inde#ectiblemente !uedar a criterio de los diseBadores
gr#icos ( maquetadores. -i no se contase con la e"periencia de pro#esionales gr#icos en el pro(ecto, puede
emplearse una subestructura tradicional 3!ue no por ser tradicional ser la ms $ptima4 !ue garantice un
orden m,nimo ( al mismo tiempo, #acilite su comprensi$n. 7radicionalmente, una estructura interna $ptima,
ser,a a!uella !ue basase su organiaci$n en el tipo de archivos. 6ara ello, se podr,a contar con una carpeta
por tipo de archivos estticos0 html, css, $s, img, audio, video, pd0, etctera.
<uando se trabajase con plantillas o es!ueletos gr#icos prediseBados como Frameworks o soluciones tales
como Bootstrap, ser aconsejable colocar dentro del directorio esttico la carpeta original de dicha librer,a,
respetando su estructura interna intacta (a !ue esto simpli#icar el proceso de #uturas actualiaciones.
La estructura interna del directorio core, claramente depende de #orma directa, del n*cleo !ue se utilice ( de
c$mo ste ha(a sido creado. -i se tiene previsto desarrollar un n*cleo propio, lo ms aconsejable ser,a
organiar los subdirectorios por responsabilidades (1o tipo de herramienta. Esto es e!uivalente a modulariar
el n*cleo. Ilgunos ejemplos ser,an0 orm, sesiones, helpers, interfaces, etc.
El directorio co))o!, sin dudas, es el !ue ma(or tendencia a la desorganiaci$n genera ( sin embargo, es el
!ue ms necesita de una rigurosa disciplina en su estructura. <omo les digo a mis alumnos, la carpeta
common debe organizarse con un rgimen militar!.
La carpeta common suele poder resolver sus necesidades con + subdirectorios0 custom ( liDs ( jams
deber,a tener archivos en la ra,, salvo contadas e"cepciones bien justi#icadas. I lo sumo, la estructura interna
ms compleja !ue pueda verse en la ra,, podr,a verse como la siguiente0
common/
FGG core
FGG custom
FGG liDs
FGG tools
JGG plugins
En esta estructura, cada subdirectorio cumplir,a una #unci$n espec,#ica0
co))o!/core@ respetando la estructura interna del core del sistema, su responsabilidad ser,a la de
almacenar cual!uier e"tensi$n del n*cleo. Ejemplos de ellos podr,an ser clases heredadas del objeto
de alg*n .R: o &ms com*n& herencia de helpers.
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
11
co))o!/custo)@ esta es la carpeta ms importante ( parad$jicamente la menos utiliada. La
tendencia universal del programador, es descargar librer,as o herramientas de terceros ( con#undir la
libertad !ue el -o#tware Libre nos da con una prctica de programaci$n. Jue un -o#tware sea libre (
permita modi#icar el c$digo no implica !ue e"ista una buena prctica de programaci$n !ue diga
>modi#ica los archivos originales ( arruina la posibilidad de mantenerlos actualiados?. Los archivos de
terceros 'I:K- deben modi#icarse. %acerlo obliga a mantener la misma versi$n del so#tware, por el
resto de los d,as sin posibilidad de instalar actualiaciones, con todos los riesgos de seguridad !ue ello
implica. El so#tware de tercero siempre !ueda intacto ( es en esta carpeta custom! !ue haremos los
cambios necesarios. L<$moM -obreescribiendo lo menos posible a!uellas clases o #unciones !ue se
deseen personaliar.
Una buena tcnica ( mu( prctica consiste en crear una +ustom?ome+lass !ue herede de una
?ome+lass e"istente ( sobrescriba el mtodo !ue se !uiere modi#icar, invocando previamente
3siempre !ue sea necesario4 al mtodo parent correspondiente. <uando se tratase de una #unci$n,
simplemente se crear,a una +uston?ome9unction para una ?ome9unction.
co))o!/l9=s@ son todas las librer,as de terceros.
co))o!/tools@ son todos a!uellos guiones 3scripts4 propios creados con #inalidades puntuales, como
pueden ser generadores de backups, cleaners, #unciones para env,o de correo electr$nico, scripts
ejecutados por el cron, etc.
co))o!/plu&9!s@ los complementos suelen ser un tema mu( discutido ( el hacerlo tiene
argumentaciones vlidas desde ambas partes. Un complemento es una aplicaci$n completa 3como un
m$dulo del sistema4 pero !ue en ve de poder ser utiliada por un usuario es utiliada por el
programador en el desarrollo de los m$dulos del sistema. )e esta #orma, un generador de #ormularios
accesible por el navegador, !ue permita al usuario crear un #ormulario de contacto para el frontend de
su sistema, ser,a un m$dulo mientras !ue una clase generadora de #ormularios !ue el programador
utiliar,a en la l$gica de una vista para crear el #ormulario !ue el usuario utilice para generar los su(os,
ser,a un plugin.
6or lo tanto, un plugin podr,a considerarse complemento del core 3es a!u, donde se discute4 ( la l,nea
!ue marca la di#erencia es mu( delgada ( est dada por la respuesta a la pregunta "#i#ir$a una
aplicaci%n sin este complemento&!. Un ejemplo claro est en 'uropio 'ngine. Il ser 'uropio un n*cleo
propiamente dicho, el generador de #ormularios se considera un plugin (a !ue se podr,a crear
cual!uier tipo de aplicaci$n (1o sistema prescindiendo de ste. -in embargo, si se creara un
framework utiliando 'uropio 'ngine, el mismo generador de #ormularios !ue ho( se considera un
plugin, deber,a #ormar parte de las herramientas del n*cleo del framework.
ESTRUCTURA INTERNA DE UN MDULO
Esta estructura #ue la !ue ms me cost$ hallar ( ms aBos me llev$ tanto investigar como probar ( evaluar
resultados.
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
12
<uando se trata de una ar!uitectura :;<, claramente cada m$dulo tendr sus directorios models, vie)s (
controllers, pero ah,, no puede ni debe concluir el es!ueleto.
Un m$dulo es un -o#tware completo. Llammosle micro&aplicaci$n si se lo desea, pero no deja de ser un
so#tware !ue emplea un n*cleo com*n. <omo tal, tendr sus propios re!uerimientos ( necesidades ( por lo
tanto, no 'o!r% 'rescin!ir !e (os siguientes archivos * !irectorios0
app,name/
FGG models/
FGG vie)s/
I JGG templates/
FGG controllers/
FGG helpers/
FGG con0ig.ini
FGG con0ig.ini.dist
FGG app,name.sKl
FGG license
JGG =817L8
La estructura anterior es la *nica !ue ha demostrado hasta el momento, verdadera capacidad de portabilidad.
Entre los directorios, nos podremos encontrar con los siguientes destinos0
)odels/
almacenaje de todos los modelos de la aplicaci$n 3m$dulo del sistema4
$9eAs/
almacenaje de la parte l$gica de todas las vistas del m$dulo
$9eAs/te)plates/
en caso de !ue el m$dulo posea templates %7:L personaiados 3!ue deban ser le,dos pero no
servidos4 es aconsejable almacenarlos en este directorio, #acilitando as, la portabilidad del m$dulo.
7o!trollers/
almacenaje de los controladores del m$dulo
helpers/
almacenaje de clases (1o #unciones a(udantes propias de este m$dulo
Los archivos de la ra, del m$dulo, es aconsejable !ue sean solo ( *nicamente los propuestos, considerando
!ue cada uno contar con la siguiente responsabilidad0
co!f9&.9!9 / co!f9&.9!9.d9st
7odo a!uel dato !ue pueda ser variable dependiendo del conte"to, debe setearse en una variable
global o pre#erentemente, en una constante. Utiliar un archivo de con#iguraci$n por secciones, es una
e"celente alternativa (a !ue la ma(or,a de los lenguajes, posee #unciones !ue permiten analiar este
tipo de archivos 3parsing4 ( utiliar su in#ormaci$n. Un ejemplo de este archivo )EBE distribuirse
3portarse4 en un archivo de distribuci$n .dist
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
13
app-!a)e.sBl
El m$dulo necesitar sus propias tablas en el sistema. Este archivo debe contener todas ( cada una de
las instrucciones -JL necesarias para !ue con tan solo importar el archivo a una base de datos, se
ejecuten las consultas re!ueridas para !ue el m$dulo #uncione sin rodeos. Una buena prctica es ir
completando este archivo en tiempo real a medida !ue el desarrollo demande cambios en la )B.
16A+26
)e verdad, este es el archivo ms importante. 6uede ser un simple archivo de te"to con instrucciones
cortas. <ada ve !ue el desarrollo demande un cambio de con#iguraci$n en la plata#orma, la
instalaci$n de un so#tware, librer,a o herramienta de terceros, dicha in#ormaci$n se agregar en tiempo
real en este archivo, bajo el t,tulo >re!uerimientos e instalaci$n?
l9ce!se
Un simple archivo de te"to con el nombre de la licencia bajo la cual se distribu(e el m$dulo (
pre#erentemente un enlace hacia el te"to de la licencia, ser la mejor #orma de portar ( distribuir micro
aplicaciones.
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
14
HACK PARA EMULAR LA
AUTOCARGA Y
DESACTI(ACIN DE MDULOS
DE UN SISTEMA COMO
POL'TICA DE EMERGENCIA
FRENTE A FALLOS
INESPERADOS
ACTI(AR Y DESACTI(AR
MDULOS DE FORMA
AUTOM:TICA, ES
ESPECIALMENTE @TIL CUANDO
EN PRODUCCIN SE HACE
NECESARIO ACTUAR DE
MANERA R:PIDA PARA
RESOL(ER CONFLICTOS EN
UN MDULO+ DE ESTA
FORMA, DESACTI(ANDO UN
MDULO TEMPORALMENTE,
NOS DAR: A TIEMPO A
RESOL(ER EL PROBLEMA EN
PRODUCCIN, SIN PONER EN
RIESGO A TODO EL
SISTEMA+
s 8D de junio, tengo la edici$n #inaliada pero de pronto la
necesidad de generar contenido *til se impone sobre la de
cumplir con lo pactado. Entonces me dije Lpor !u no hacer
una edici$n ms >temtica?. A as, surgi$ esta imperiosa necesidad
de reeditar la revista a penas horas antes de su lanamiento, con el
#in de o#recerles unas notas !ue en su conjunto, les puedan servir
para aplicar a todo un pro(ecto.
E
En el art,culo de pgina 8, les comentaba sobre la estructura de
directorios de#initiva !ue tras aBos de pruebas e investigaci$n,
logr hallar para armar el es!ueleto irre#utable de una aplicaci$n
modular.
En el proceso de investigaci$n anterior, me es#orc por obtener
resultados objetivos independientes del lenguaje. 5ncluso, me ocup
de in#ormarme sobre las sugerencias !ue e"pertos en cada lenguaje
propon,an ( de all, !ue pude tomar lo mejor de cada una. A en ese
camino, hall la soluci$n a otro problema !ue les trasmito a
continuaci$n.
Una gran parte de los lenguajes algebraicos interpretados, cuentan con constructores !ue #acilitan desde la
autocarga de clases 3el caso de 6%6 con la pr$"imamente obsoleta ((autoload
N
(
N http011www.php.net1manual1es1#unction.autoload.php
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
15
spl(autoload(register
2
4 hasta el tratamiento de directorios como pa!uetes 3el caso de 6(thon con el
archivo ((init((.py4.
<ada lenguaje tiene su >buenas ideas? ( sus a*n mejores mtodos ( de todos ellos es posible dejarse inspirar
para obtener grandes soluciones propias !ue permitan mejorar la calidad de nuestros pro(ectos ( por sobre
todo, del diseBo de nuestras aplicaciones.
Este hack !ue les !uiero contar, permite activar * !esactivar !e orma autom%tica, !etermina!os
m+!u(os !e nuestro sistema, con so(o a(terar un va(or !e orma &inariaA Esto puede ser mu( *til
cuando trabajamos con soluciones modulares propias !ue al distribuirse pueden di#erentes re!uerimientos
modulares.
La solucin consiste en definir una directiva con valor
binario, en el archivo de configuracin del mdulo la
cual sea verificada al arrancar el sistema actuando en
consecuencia.
)e esta #orma, cada m$dulo del sistema podr,a contar con una variable 1*452517 dentro de una secci$n
-1PP61L8/ del archivo de con#iguraci$n del m$dulo, cu(os valores posibles puedan ser & o %, 4rue o 9alse,
5n u 500 o cual!uier otro valor binario.
; Archivo: appname/confi.ini
[ACCDA26]
; ...
1*452517 = & ; ! para activar" # para desactivar la autocara
; ...
Il arrancar el sistema, un autoload propio recorrer el directorio de aplicaciones 3m$dulos del sistema4 (
preguntar si el valor de IU7.L.I) para cada m$dulo es el e!uivalente a encendido 3/4. )e ser as,, el auto&
cargador del sistema, proceder a importar1cargar un archivo centraliador del m$dulo !ue deber,a incluirse
en la ra, del mismo.
)e esta #orma, desactivar un m$dulo del sistema consistir en establecer a D el valor de una *nica variable. Lo
anterior puede tambin ser complementado a nivel gr#ico, recurriendo a la misma variable para saber si
incluir o no en la inter#a gr#ica al m$dulo correspondiente. )e esta #orma, visualmente se activar,an o
desactivar,an botones ( men*s 3entre otros complementos gr#icos4 con solo modi#icar el valor de una *nica
variable.
2 http011www.php.net1manual1es1#unction.spl&autoload&register.php
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
16
ESE CAPTCHA NO (ERIFICA
A LOS HUMANOS, SINO *UE
COMPRUEBA SU MIOP'A
NO ME DIGAS SI ERES
HUMANO+ SOLO EN('A ESTE
FORMULARIO SI NO ERES
MIOPE+
i la inteligencia arti#icial no va acompaBada de inteligencia
real, de mu( poca utilidad resultar. -
-e supone !ue la 5ngenier,a es la ciencia encargada de encontrar
soluciones a problemas e"istentes, en un rea determinada. )e
esta #orma, la 5ngenier,a de -o#tware, se encarga de encontrar
soluciones in#ormticas a problemas determinados.
-in embargo, (a im'(ementaci+n !e captchas ha su'uesto
(a generaci+n !e un 'ro&(ema, resu(tan!o so(ucionar menos
!e (o ,ue com'(ica.
Un requisito de inteligencia debera ser la simplicidad
-i una soluci$n no es simple, no deber,a ser considerada inteligente. 6ues la grandea e"iste en la simplicidad.
<omo usuario de un sistema, seguramente padeciste la #rustraci$n de no lograr enviar un #ormulario
e"itosamente por!ue has #allado acertando la respuesta al captcha o peor a*n, por!ue tu tiempo de sesi$n ha
e"pirado. <omo programador1a Bte '(anteaste a(guna ve) ,ue si (os captcha han si!o crea!os 'ara
!escartar ro&ots cometen un error a( e:'irar 'uesto ,ue (os humanos 'or natura(e)a 'rocesamos
(a inormaci+n m%s (ento ,ue un or!ena!orC
La idea de los captcha siempre me gust$ ( me result$ sumamente interesante, conceptualmente hablando.
6ero ni su propuesta ni su implementaci$n me han resultado *tiles. )e all, !ue decid, crear mis propios
captchas en mis aplicaciones, !ue solo veri#icasen !ue !uien pretende enviar un #ormulario sea humano ( no,
!ue no sea miope.
Los captchas, en su ma(or,a, utilian imgenes generadas al aar a #in de !ue la respuesta no pueda ser le,da
por un ordenador. -in embargo, la inteligencia arti#icial &al menos en niveles accesibles& no ha alcanado a
>raonar? como lo hacemos los humanos. Esto, signi#ica !ue un ordenador, no ser,a capa, por ejemplo, de
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
17
raonar lateralmente, de entender el sarcasmo o dis#rutar de un chiste. Entonces Lpor !u no utiliar te"to
plano ( preguntar de !u color es un albarico!ue violetaM
Lo admito. Oo se !u es un albarico!ue 3(a lo buscar en el diccionario4, pero s, so( capa de deducir !ue la
respuesta correcta a la pregunta anterior es violeta. A no necesit hacer es#ueros, claro est.
=CMO CREAR UN CAPTCHA EN TE%TO PLANO *UE SOLO PUEDA SER
RESPONDIDO POR HUMANOS>
Lo *nico !ue necesitas es generar tus propias preguntas ( respuestas. <uanto ms #cil sea la pregunta,
mejores resultados obtendrs. -e necesitar,a una base de datos para hallar las respuestas por un ordenador o
un algoritmo de inteligencia arti#icial altamente avanado, pero a*n no ha sido desarrollado 3aun!ue s,
investigado4.
Las mejores preguntas sern a!uellas impli!uen el cumplimiento de ciertas consignas. 6or ejemplo >d,game
cuantos dedos ha( en una mano pero no utilice n*meros?. %asta un niBo pe!ueBo podr,a responder >cinco?.
LA BASE DE DATOS
La lista de preguntas ( respuestas puede ser almacenada en una base de datos tradicional, o mejor a*n, en
un archivo de te"to plano !ue consuma menor cantidad de recursos.
En este *ltimo caso, se deber decidir un #ormato identi#icador para el conjunto&par pregunta&respuesta. :i
pre#erido es colocar un par por l,nea ( respuesta separada de pregunta por un pipe.
Pregunta & . =espuesta &
Pregunta 2 . =espuesta 2
Pregunta M% . =espuesta M%
de esta #orma, el carcter divisor de pares ser el salto de l,nea ( el de pregunta&respuesta, el pipe.
LA OBTENCIN DE UNA PREGUNTA
La pregunta debe ser algo elegido al aar (a !ue el aar di#iculta la generaci$n de cracks. Las #unciones
random del lenguaje, son *tiles en estos casos. Un ejemplo en 6%6 podr,a verse como el siguiente0
# Almaceno el contenido de la $ase de datos en un arra% (salto las lneas en $lanco)
$ro)s = 0ile("dataDase"# 9328(?N3P(8LP4O(2368?);
# &enero un entero al a'ar para utili'ar lueo como ndice
$random = rand(%# count($ro)s) , &);
# ($teno el par preunta)respuesta
$par = $ro)s-$random/;
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
18
# *eparo la preunta de la respuesta
list($pregunta# $respuesta) = explode("."# $par);
CAPTURAR LA RESPUESTA SIN RE*UERIR SESIONES
Il usuario mostraremos la pregunta0
PAphp echo $pregunta; A>
A por l$gica, o#receremos una #orma de indicar la respuesta, mediante un campo de #ormulario0
Pinput type="text" name="respuesta">
6ara luego validar la respuesta 3sin re!uerir almacenarla previamente en una sesi$n4 necesitaremos una
#orma de capturar la respuesta ( saber a !u pregunta pertenece. 6ara ello, podremos recurrir al n*mero de
,ndice almacenndolo en un campo oculto 3aun!ue esto ser,a algo bastante vulnerable40
Pinput type="hidden" name="random(Kuestion" value="PAphp echo $random; A>">
6ara hacerlo menos vulnerable, podr,a crearse un token para este campo, el cual se guardase temporalmente
en un archivo junto al inde( correspondiente0
$toQen = mdM(uniKid(mt(rand()# 4rue));
0ile(put(contents("/private/dir/$toQen"# $random);
Luego, lo !ue ser,a almacenado en el hidden, ser,a el to=en0
Pinput type="hidden" name="random(Kuestion" value="PAphp echo $toQen; A>">
de esta #orma, se podr,a capturar la respuesta ( la pregunta a travs de su to=en.
(ALIDAR LA RESPUESTA
-i se ha generado un to=en, obtendremos el inde( de la respuesta a travs de la lectura del archivo
>to=eniado?0
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
19
$opt = array("0lags"=>93248=(921>(?4=3P(@3>@);
$user(toQen = isset($(P5?4-"random(Kuestion"/) A 0ilter(var(
$(P5?4-"random(Kuestion"/# 93248=(?16343B8(?P8+312(+@1=?# $opt) C "null";
$indice = null;
$0ile = "/private/dir/$user(toQen";
i0(0ile(exists($0ile)) $9!d9ce ; f9le'&et'co!te!ts%$f9le(<
Una ve obtenido el ,ndice, solo es cuesti$n de repetir los pasos con los !ue se obtuvo la pregunta para
obtener la respuesta ( compararla0
$ro)s = 0ile("dataDase"# 9328(?N3P(8LP4O(2368?);
$par = $ro)s-$9!d9ce/;
list($pregunta# $respuesta) = explode("."# $par);
i0($respuesta == $respuesta(dada(por(el(usuario) <
# todo correcto ...
E else <
# respuesta equivocada ...
E
Ilternativamente, dado !ue no necesitamos conocer la cantidad de datos alojados en el archivo, para localiar
la respuesta podemos recurrir al mtodo seeQ de ?pl9ile5D$ect0
$dataDase = ne) ?pl9ile5D$ect($0ile);
$dataDase,>seeQ($indice);
$respuesta = $dataDase,>current();
Il #inaliar toda la comprobaci$n, es aconsejable liberar espacio en disco eliminando el archivo creado. Oo
obstante, una tarea programada en el cron !ue se ejecute de #orma peri$dica en busca de archivos antiguos
3de un / d,a de antigPedad o ms4 para eliminarlos, ser,a un complemento ideal.
Lectura recomendada
Emu(aci+n !e to0ens !e seguri!a! tem'ora(es 'ara e( registro !e usuarios
http011librar(.originalhac=er.org1search1to=en
The Original Hacker www.originalhacker.org
2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA
20
ACE#T$2.@
Lsuicidio, homicidio o un caso para >:older ( -cull(?M
Un e!uipo de investigadores encuentra en una habitaci$n completamente
vac,a, carente de ventanas ( con la *nica puerta cerrada con un pestillo desde
el interior, a un hombre ahorcado con una soga amarrada de una biga ubicada
a G mts del suelo ( a +D cm del techo. I los investigadores, llam$
poderosamente la atenci$n, haber encontrado el suelo lleno de agua, teniendo
en cuenta !ue en toda la habitaci$n, no hab,a caBer,as ni ning*n otro objeto
ms !ue las paredes, el techo, el suelo, el occiso, la soga, la biga ( la puerta
con su pestillo. L<$mo logr$ colgarse el occisoM
A*u!a@ los investigadores hallaron la respuesta en el agua encontrada en el suelo de la habitaci$n.
Responde ANTES del 20D0ED2014 a travs de T=itter utiliando el hashtag FAcertiGoT./E
E( nom&re !e (os gana!ores ser% 'u&(ica!o en (a siguiente e!ici+n
La respuesta correcta ser publicada en 7he .riginal %ac=er OQC junto con los ganadores

S.1"C$HN A1 ACE#T$2. 4E T/E .#$I$NA1 /ACJE# N67
Esta ve no nos ha ido tan bien con el acertijo. 6or si no lo recuerdas, el mismo dec,a >6or /, 'uan deb,a pagar
RN ( lo mismo !ue paga por / lo paga por N. 6or /N, el precio era de R/D pero por /DD, de R/N. LJu estaba
comprando 'uanM? ( la respuesta, estaba en la misma a(uda0 >I(uda0 !ue los nKmeros no te engaBen....?.
S'uan estaba comprando n*merosT Los n*meros !ue compraba podr,an haber sido los !ue se colocan en las
puertas de las casas para identi#icar un domicilio o hasta incluso velas de cumpleaBos.
Esta ve no ha( ranking de ganadores. -olo podemos mencionar la respuesta
ms acercada, !ue nuevamente, ha sido la del >#uturo #iel seguidor? del
FAcertiGoT./, L!iego!e(avega S9elicitacionesT
En la simplicidad se encuentran las verdaderas respuestas
El UCE de las personas estudia para ampliar sus conocimientos.
6ero tu, puedes ser parte del otro +E.
w w w . c u r s o s d e ' r o g r a m a c i o n a ! i s t a n c i a . c o m
c l a s e s i n d i v i d u a l e s V p e r s o n a l i a d a s
p a r a e l + E ! u e b u s c a l l e g a r m% s a ( ( % ! e ( c o n o c i mi e n t o
FREE AS IN FREEDOM
LA (ERDADERA ;TICA HACKER
Oecesitamos vivir en un mundo donde el acceso al conocimiento sea 1$B#EH donde la so(i!ari!a! con el vecino O. sea $1MC$TA. )ebe dejar de condenarse el
compartir conocimiento con nuestros seres !ueridos ( allegados. EA B!C"0 e1$D en $u1 C!n01, #!y CuB#0 Eue Fue4e1 #!Be2+
DILE A MO&ILLA *UE NO
INCORPORE EL DRM DE
ADOBE A FIREFO%
-$lo una semana despus del ),a
5nternacional contra el )R:, ;o)i((a
anunci+ ,ue a'o*ar% (a Iesti+n
4igita( !e #estricciones en su
navega!or <ireo:, el cual tendr una
utilidad incorporada !ue obtendr e
instalar automticamente los )R: de
Idobe.
EN>MA1E "N E-;A$1 A AN4#EAS IA1
3<7. de :oilla4 hacindole saber !ue te
opones al )R:.
CANCELA TU CUENTA EN
NETFLI% GYO LO HICEH
%ace un aBo atrs, enterada de !ue
Net(i: so(o 'ermitir?a (a
re'ro!ucci+n !e v?!eos en
navega!ores extensiones
premium Nas? ((amaron a( 4#;O
cancel mi suscripci$n anual Lpor !uM
6or!ue la libertad de toda una
comunidad )EBE valer ms !ue
cual!uier serie %).
I<<E)E I 7U <UEO7I )E OE79L5W (
EN>MA1ES "N ;ENSA2E
CANCE1AN4. T" S"SC#$PC$HN.
Anuncia tu !ecisi+n en T=itter ( tus
redes sociales.
NO USES DISPOSITI(OS
*UE PROHIBEN COMPARTIR
TUS PROPIOS ARCHI(OS
CON LIBERTAD
GYO NO LOS USOH
Ama)on Jin!(e, iPa!, iPo!, iPhone (
dems dispositivos de Ipple inclu(en una
@esti$n )igital de Restricciones !ue !aQa
(a (i&erta! !e (as 'ersonas.
)ispositivos con Indroid Stambin son
peligrososT
RN. 1.S "SESS
UTILI&AR SOFTWARE PRI(ATI(O O DISPOSITI(OS CON RESTRICCIONES
Y DECIR *UE APOYAS EL SOFTWARE LIBRE, ES CINISMO+
UN HACKER ;TICO ES A*UEL *UE ES COHERENTE CON LO *UE DICE Y HACE+
HACKTI(ISMO ;TICO
LAS SIGUIENTES COMPA?'AS HACEN DA?O A LA LIBERTAD DE LAS PERSONAS
Los siguientes logotipos (1o isotipos son propiedad registrada de cada una de las empresas mencionadas ( se utilian en este a#iche sin permiso de las mismas.
:ediante sus plata#ormas
Xindle ( 6rime. 1eer m%s 5
Ipple utilia el )R: para controlar
i.- ( a los usuarios de .- W.
1eer m%s 5
El )R: se incorpora en el cora$n de
Yindows ( muchos servicios como
-ilverlight, imponen el )R: en los
usuarios. 1eer m%s 5
Oo satis#echo con el uso de )R: para su servicio de
streaming, ahora Oet#li" est tratando de imponer el
)R: en la Yeb. 1eer m%s 5
-on( ha utiliado acciones legales para hostigar e
intimidar a las personas !ue han modi#icado sus
sistemas 6-8. 1eer m%s 5
SI DE (ERDAD APOYAS EL SOFTWARE LIBRE, @SALO, PROMU;(ELO Y ABANDONA LO PRI(ATI(O SIN
E%CUSAS+ EL CAMBIO EST: EN TUS MANOS+
1407011352019
1407011352019
7

You might also like