@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 Se3$e4"2e 56.7 'NDICE DE LA EDICIN NRO8 GU'A PARA SER UN BUEN ESTUDIANTE DE SISTEMAS9 LAS .5 REGLAS DEL APRENDI& DE HACKER+++++++++/ SOBRE EL REPORTE DEL BUG :;<==/ EN APACHE 5+7 Y OTROS CONFLICTOS SOBRE UBUNTU .7+67+++8 NO(EDADES SOBRE ,ACKTHESTRIPPER Y EUROPIOCODE ++++++++++++++++++++++++++++++++++++++++++++./ TUI9 TE%T USER INTERFACES EN GNU)BASH Y PYTHON++++++++++++++++++++++++++++++++++++++.7 PYTHON WEB SIN FRAMEWORKS9 SOBRE LAS SESIONES Y EL ACCESO RESTRINGIDO+++++++++++++++++++++55 The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 3 GU'A PARA SER UN BUEN ESTUDIANTE DE SISTEMAS9 LAS .5 REGLAS DEL APRENDI& DE HACKER Eugenia Bahit agradece a Hugo (@huguidugui) por la revisin ortogrfica de este artculo SER UN BUEN ESTUDIANTE NO IMPLICA SER (ISTO COMO UN BUEN ESTUDIANTE+ SER UN BUEN ESTUDIANTE, SOLO RE*UIERE SABER ADMINISTRAR LAS ENERG'AS IN(ERTIDAS EN APRENDER+ uchas personas podran creer que un buen estudiante es aquel que cae bien al docente, pero nada ms lejos de la realidad. !uando hablamos de buen estudiante no nos re"erimos a aquel que seg#n terceras personas resultara ser un buen alumno, sino a aque que sa!e "#mo me$or invertir sus energ%as en e tiem&o 'e que 'is&one &ara sa"ar e m()imo &rove"ho 'e o que 'esea a&ren'er*. $qu podrn encontrar una serie de normas o &re"e&tos que os a+u'ar(n a ser me$ores estu'iantes. REGLA N.9 NO ESTUDIES ESTANDO CANSADO, TRAUMATI&ADO O MAL HUMORADO %eurol&gicamente, el cerebro absorbe ' asimila mejor la in"ormaci&n que le llega estando en buen estado anmico. (oda la in"ormaci&n que ingrese al cerebro bajo una situaci&n poco agradable )'a sea cansancio, estr*s, mal humor u otra emoci&n negati+a,, por asociaci&n indirecta, ser enla-ada a algo negati+o. .e esta "orma, si acabas de recibir un telegrama de despido de tu trabajo ' *ste, te generase /ms all de la sorpresa ' lo inesperado/ un gran malestar, si inmediatamente te e0plicasen qu* es un algoritmo, tu cerebro, indirectamente, asociara algoritmo a sorpresa desagradable. REGLA N59 ESTUDIA CON TU CEREBRO PERO MENTAL'&ATE CON TU ESP'RITU 1sta regla +iene de la mano de la anterior. %o basta con solo no estar de mal humor a la hora de estudiar. 1s sumamente importante que sea capa- de generarte a ti mismo, buenas sensaciones antes de entrar a la clase. $l momento de comprender ' asimilar lo nue+o, utili-ars la ra-&n, pero te mentali-ars pre+iamente para llenarte de un espritu positi+o antes de comen-ar a emplear la ra-&n. 2or los mismos moti+os que los mencionados en la regla %34, esto a'udar a asimilar mejor la nue+a in"ormaci&n. The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 4 REGLA N/9 NO FALTES A TUS CLASES Y S> PUNTUAL La hora de ir a clases debe ser sagrada, irrenunciable e impostergable. 2ues cada clase es tu #nica oportunidad de conectar con tu maestro ' aprender de *l o ella. 5i supieses que tu siguiente clase ser tu #ltima clase 6llegaras tarde o cancelaras la clase7 5eguramente no. 8 eso es porque realmente +aloras el hecho de poder aprender de tus maestros. REGLA N79 EN LA CLASE, CONC>NTRATE SOLO EN LA CLASE 1sto signi"ica que debes tener tus 9 sentidos puestos en la clase. 1n el aula, apaga el m&+il ' si*ntate en un lugar donde nada pueda distraerte. %i hablar de :no utili-ar reproductores de m#sica; 5i grabars la clase, aseg#rate de hacerlo con un dispositi+o que no pueda distraerte. 5i "unciona a pilas<batera, aseg#rate que est*n cargadas. 5i requiere de cinta o unidad de almacenamiento aseg#rate de que tenga espacio su"iciente, etc. 5i la clase es online, busca un lugar tranquilo ' silencioso. %o escuches radio, (=, ni m#sica mientras cursas. 5i cursas en casa estando en "amilia, a+isa a tu c&n'uge o padres )seg#n el caso, que necesitars estar un tiempo a solas para tomar una clase online, de manera que nadie te distraiga con risas, an*cdotas, etc. 5i cursas en tu lugar de trabajo, aseg#rate de que se te asigne un lugar aislado para tomar tu clase ' que nadie te moleste en ese momento. 5i alguna de las anteriores circunstancias no te es posible cumplir, es pre"erible optar por cursos presenciales 'a que hacerlo a distancia no ser para nada producti+o. REGLA N;9 SIEMPRE PREFIERE E,ERCITAR LO APRENDIDO *UE LEER O TEORI&AR $ no ser que tu maestro te indique que debes leer algo en particular, tu primera reacci&n, siempre debe ser ejercitar aquello de lo que ha'as hablado en clase. La psicopedagoga di"erencia entre el >saber> ' el >saber hacer> considerando que solo cuando se llega a este #ltimo se ha aprendido realmente 4 . %adie aprende a caminar teori-ando sobre los pasos que alg#n da deber dar. 5implemente, una +e- comprendido qu* es lo que se debe hacer, se lo intenta hacer repetidamente hasta que logre hacerse de "orma natural. REGLA N<9 MANT>N FLUIDE& Y CONTINUIDAD .e "orma tal, que entre una clase ' otra no quede tiempo muerto. 5i has logrado estudiar todo lo que debas estudiar en menos tiempo del esperado, debers administrar mejor tu tiempo. 5i te ha sobrado el tiempo, repite ' re+isa tus ejercicios o relee lo que el docente te indic&, pero utili-a el tiempo sobrante en asimilar mejor lo que ha'as aprendido. 5i ests estudiando con a'uda de terceras personas, me-clar mecanismos autodidactas puede ser contraproducente. 1ntonces, cuando te sobre tiempo, no intentes incorporar nue+os conocimientos 'a que corrers el riesgo de mal interpretar lo que 'a ha'as aprendido. 4 5eg#n ta0onoma cogniti+a de Bloom. The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 5 REGLA N?9 CONF'A EN TUS MAESTROS La con"ian-a en tus maestros es la cla+e "undamental para aprender lo que tus maestros te ense?en. 5i no tienes con"ian-a pro"esional en tus maestros, estars in+irtiendo tus energas en cuestionar lo que tus maestros te ense?en ' terminars no aprendiendo nada. 5i no con"as en tu maestro, busca uno en el que con"es. 5i no con"as en la instituci&n en la que estudias, no intentes buscar un maestro en quien con"iar dentro de esa instituci&n. B#scalo "uera. 2ero ten en cuenta que si con"as en tu maestro, con"iars en lo que te ense?e. 8 si con"as en lo que te ense?a, solo debers ejercitarlo para haberlo aprendido. REGLA N=9 PREGUNTA TODO LO *UE NO ENTIENDAS SIN INTERRUMPIR A TU MAESTRO !uando estudies a solas, anota todas las dudas que tengas para luego consultarlas a tu maestro. !uando est*s en la clase ' tu maestro se encuentre e0plicando un tema, apunta todo lo que no entiendas ' cuando tu maestro pregunte a la clase si se ha entendido lo que e0plic&, pide permiso para preguntar lo que ha'as apuntado ' preg#ntalo cuando tu maestro te autorice a hacerlo. %unca interrumpas a tu maestro mientras e0plica un tema. @acerlo podra distraer tu atenci&n, la su'a o la de tus compa?eros ' lograr perder el hilo conductor. REGLA N89 NO LEAS EL MATERIAL T>CNICO COMO UN CUENTO O UNA NO(ELA 1l material t*cnico no posee un principio un nudo ' un desenlace. 2or eso, no debe ser ledo como una obra literaria ms. !uando te en"rentes a material t*cnico, lo primero que debes leer es el ndice de contenidos e ir hacia aquello que te interese incorporar )a no ser que tu maestro 'a te ha'a dado las indicaciones del caso,. Lo segundo que debes hacer, si encuentras c&digo "uente, tratar de e0plicrtelo a ti mismo antes de leer el te0to. Lo tercero, es leer el te0to que rodea al c&digo "uente. $ continuaci&n, copiars ' ejecutars el c&digo "uente del libro tal ' como aparece. Luego, tratars de modi"icarlo ' "inalmente, si aplica, tratars de implementarlo en alg#n conte0to. 5olo despu*s de todo esto, adelantars la lectura, incluso aunque ha'as estado A horas en la misma carilla. REGLA N.69 CUANDO TU MAESTRO TE CORRI,A, APRENDE, NO TE ,USTIFI*UES 2or lo general, conocer los moti+os que lle+aron a cometer un error no requiere de e0plicaci&n. Bn buen maestro es capa- de conocer los porqu* del error. 5i in+iertes tus energas en e0plicar a tu maestro por qu* te has equi+ocado, estars desperdiciando la oportunidad de aprender. 5i cuando tu maestro te corrige, solo te concentras en comprender e0actamente qu* es lo que tu maestro te est diciendo, apro+echars mejor el tiempo 'a que podrs emplear el tiempo disponible en preguntar lo que a#n no ha'as entendidoC en ejercitarlo "rente a tu maestroC o en rati"icar con tu maestro que lo has entendido realmente. 5i en cambio te preocupas por e0cusarte del error cometido, solo habrs in+ertido el tiempo en eso ' no habrs aprendido nada. The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 6 REGLA N..9 NO PRETENDAS SABER TODO EN UNA SOLA CLASE 2ara aprender de +erdad debes ser paciente. 5i en una sola clase intentas e+acuar todas las dudas que te ha'an surgido a lo largo de tu carrera, no hars ms que saturarte de in"ormaci&n ' por consiguiente, conocers las cosas super"icialmente sin llegar a saber nada. Dntenta no abarcar ms de un tema por clase para poder alcan-ar un mejor ni+el de e0periencia en el mismo. REGLA N.59 NUNCA DES POR SENTADO *UE HAS ENTENDIDO ANTES DE *UE FINALICE LA E%PLICACIN !uando preguntas algo a tu maestro ' *ste comien-a a e0plicarte el tema, es probable que con las primeras palabras que escuches creas haber comprendido todo por completo. Lo que en realidad sucede es que un buen maestro comen-ar a darte la e0plicaci&n citando aquello con lo que sabe 'a tienes un dominio. 2or eso crears haberlo entendido todo. 5i en ese momento te cierras a continuar escuchando o peor a#n, interrumpes a tu maestro ' le impides continuar la e0plicaci&n, ms all de ser +isto como un irrespetuoso estars actuando como necio ' t# mismo te cerrars la puerta a aprender aquello que te generaba dudas. Bn buen maestro no es escueto en sus e0plicaciones pero tampoco es hablador. .e un buen maestro puedes aprender hasta de su #ltima palabra, pero solo si eres un buen estudiante. ANE%O I9 CONSIDERACIONES GENERALES *UE ME,ORAN LA E%PERIENCIA COMO ESTUDIANTE CE@IRSE A LAS PAUTAS DICTADAS POR EL DOCENTE Cuando era pequea, recuerdo haber sido regaada por mi maestra de segundo grado tras haber entregado tarea de ms Cuando se lo coment! a mi mam, ella, mostrndose o"endida di#o$ pero est loca esa mujer? cmo va a retar a una criatura por tener iniciativa? Tendra que haberte felicitado %enta por mi maestra un gran respeto & un enorme cario as que me resultaba imposible creer que ella se pudiese equi'ocar (ero por mi mam senta mucho ms respeto, un incomparable amor & algo que no senta por mi maestra$ admiraci)n *s que tampoco era posible que se equi'ocara Entonces, no quedaba ms remedio que tratar de compatibili+ar ambas opiniones, la de mi mam con la de la maestra , a pesar de mi escasa e-periencia, lo intent! .o cierto era que siempre senta que la tarea me quedaba corta, la "inali+aba mu& rpido & me aburra mucho el resto del tiempo *s que pens! que si mi mam deca que estaba bien & la maestra, que estaba mal, compatibiliar ambas sera como meclar colores! hacer un bello rosa! meclando un hermoso rojo con blanco" *s que la siguiente 'e+, al terminar la tarea que mi maestra me haba encomendado, me le'ant! de mi pupitre & le di#e$ %eo/, &a termin! pero me aburro mucho si no hago nada 0me puede dar ms tarea, por "a'or1 , as "ue, como *na 2ara, mi maestra de primero & segundo grado, me nombr) su *&udante o"icial , mi nueva tarea fue mucho ms divertida que la que #o pretenda hacer" 3esde ese momento & hasta el 4ltimo da de clases, se me haba encomendado colaborar en la preparaci)n de e#ercicios para mis compaeros & a&udar a aquellos a quienes se les complicara resol'erlos, cada 'e+ que me sobrara tiempo libre The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 7 La historia anterior, sin dudas, marc& mi +ida en muchos aspectos ' el ms rele+ante a ni+el pro"esional, ha sido en mi aspecto como docente /' tambi*n como alumna/. Erecuentemente, la ma'ora de las personas cree que hacer ms de lo que se les pide es algo elogioso. Dncluso muchos consideran que hacer algo 1FGH de lo que se les pide es a#n ms digno de grandes elogios. 5in embargo, imagina esta situaci&nI 5as al aeropuerto & pides comprar un pasa#e a 6ait que tan solo cuesta un 78 Cuando la empleada te entrega el pasa#e, 'es que el destino es Canc4n & que el 'alor del pasa#e es de 78999 .e reclamas a la ca#era & ella te responde$ no se preocupe por el precio, se lo regalo para que pueda 'ia#ar a un me#or lugar que 6ait .o que la ca#era no tu'o en cuenta, es que t4 quieres ir a 6ait porque es el 4nico lugar del mundo que a4n te queda sin conocer :o importa para ti qu! lugar es me#or o peor, pues para ti, lo me#or para cumplir tus ob#eti'os de conocer el mundo, es ir al 4nico lugar al que #ams has ido 1s e+idente, que cuando uno pide algo, espera que la otra persona haga lo que se le pide sin modi"icaciones, pues todo lo que se pide, se pide por un moti+o. 1ntonces 6con qu* "in haras lo contrario7 Dncluso aunque imagines que hacer lo que no se te pide es la mejor alternati+a, el riesgo de estar equi+ocndote es altsimo. 1n lo personal ' pro"esional, la e0periencia +i+ida en la ni?e- me lle+& a aprender queI !omo alumna, sincerarnos con nuestro maestro ' decirle la "orma en la que nos sentimos con respecto a sus pautas, es bene"icioso para nuestro aprendi-aje ' para la satis"acci&n de nuestro espritu. !omo docente, es tan importante escuchar a nuestros alumnos como tener en cuenta sus emociones ' que se debe ser "le0ible a la hora de "ijar las pautas de ejercitaci&n. Bn buen maestro, sabe con e0actitud como guiar a sus alumnos ' por consiguiente, cuando encomienda determinada tarea, lo hace con un #nico "inI lograr un aprendi-aje signi"icati+o en sus alumnos. 2or ese moti+o, es tan importante seguir sus pautas a la hora de cumplir con los ejercicios propuestos ' ser honestos a la hora de e0presar c&mo nos hemos sentido. ACEPTA *UE LOS FALLOS EN TUS CDIGOS E INCLUSO LOS DEL SISTEMA, FORMAN PARTE DE LA TAREA DE PROGRAMAR %o me canso de e0plicar esto a mis alumnos ' de hacer los m0imos es"uer-os para que lo comprendan. Cuan'o intentamos e$e"utar nuestra a&i"a"i#n + ,aa, &ue'e 'e!erse /como es sabido/, tanto a un error nuestro en e "#'igo "omo a una "ara"ter%sti"a 'e sistema que 'e!e ser mo'i,i"a'a- Erente a un "allo, podemos reaccionar con la misma ignorancia e inmadure- de un usuario, blas"emando por los cuatro costados lo inser+ible que es el sistema, lo injusta que es la +ida ' la "orma en la que *sta apesta o podemos a"rontar la situaci&n como lo que es en realidadI un problema inesperado que como pro"esionales estamos capacitados para resol+er. The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 8 1n este sentido, es importante comprender dos cosasI La primera, es que si nos dedicamos al desarrollo de sistemas, debemos entender que la Dngeniera es la ciencia encargada de resol+er problemas e0istentes aplicando la rama de estudio que le es competencia. .e esta "orma, la Dngeniera de 5o"tware es la ciencia encargada de resol+er problemas e0istentes mediante la aplicaci&n in"ormtica. 2or lo tanto, en Dngeniera, os errores no son m(s que &ro!emas + os &ro!emas son os que ha"en que a .ngenier%a tenga senti'o. 5in problemas, no ha' Dngeniera que aplicar. La segunda, es que los errores /que son en realidad problemas/ deben tomarse como algo no solo esperable sino adems, deseable. Es ne"esario que os sistemas ,aen, tanto los propios como aquellos sobre los cules *stos se sustentan, porque de lo contrario, no habra "orma de saber si lo creado "unciona +erdaderamente o solo lo aparenta. .e hecho, a t/"ni"a 'e &rograma"i#n m(s "om&e$a + avan0a'a que e)iste, se !asa en ha"er ,aar a a&i"a"i#n*. e re"iero a (... Si asumes que los errores son deseables y que resolverlos ES tu tarea propiamente dicha, podrs disfrutar de cada segundo de estudio y no conocers los lmites. Podrs atravesar la barrera del conocimiento y alcanzar metas inimaginables. 2ero, si te en,rentas a os errores "on inma'ure0, no logrars ms que amargura ' te estar(s "erran'o as &uertas a a&ren'i0a$e. The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 9 SOBRE EL REPORTE DEL BUG :;<==/ EN APACHE 5+7 Y OTROS CONFLICTOS SOBRE UBUNTU .7+67 Eugenia Bahit agradece a Hugo (@huguidugui) por la revisin ortogrfica de este artculo RECORRIDO SOBRE LOS PROBLEMAS MAS FRECUENTES HALLADOS EN LA (ERSIN 5+7 DE APACHE COMPILADA POR UBUNTU .7+67 Y SUS POSIBLES SOLUCIONES+ l pasado jue+es A4 de agosto estaba dictando clases, cuando casi literalmente e0plot&, producto de un ataque de ner+ios generado por los innumerables martes 4J que +engo atra+esando con la +ersi&n 4K.LK L(5 de Bbuntu. 1 $lgunos de mis alumnos decidieron probar esta nue+a +ersi&n cuando 'o a#n no termin* de in+estigarla, pues los cambios a los que me he tenido que en"rentar, mu' poco me han agradado ' eso, ha retrasado mis testeos. 1ntre Bbuntu 4K.LK ' $pache A.K los cambios implementados, en mi opini&n pro"esional, no hacen uno bueno ' traen ms problemas que solucionesI que si el ;eb %ite no se almacena en /var/wwwC que si el 5irtual6ost no posee la e0tensi&n .confC ' ahora, que si se acti+a MultiViews "alla ModRewrite. BPOR *U> SI NO (A A )(AR)WWW DA UN FORBIDENC 2orque en el archi+o de con"iguraci&n de $pache que +iene en la compilaci&n para Bbuntu 4K.LK )locali-ado en /etc/apache2/apache2.conf,, por de"ecto, se encuentran denegadas todas las solicitudesI <Directory /> ... Require all denied </Directory> 2ero son concedidas al directorio /var/wwwI The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 10 <Directory /var/www/> ... Require all granted </Directory> 1Es esto una "uesti#n 'e seguri'a'2 5 lo es, no me e0plico c&mo es posible que por de"ecto se permita entonces un ista'o 'e 'ire"torio ra%0, una 'e as &eores &r("ti"as 'e seguri'a'I <Directory /var/www/> Options Indexes FollowSy!in"s ... </Directory> 5i se quiere conser+ar <+ar<www como lugar de almacenaje para los ;eb %ites, bastar con agregar un nue+o <Directory> ' as solucionar ese maldito <orbiden. 5ino, solo modi"icar la ruta /var/www por la que se deseeI <Directory /nuevo/directorio/> Options #nde$es FollowSy!in"s %llowOverride &one Re'uire all (ranted </Directory> =ale aclarar que &rohi!ir e ista'o 'e 'ire"torios ser( una !uena &r("ti"a. 2ero 3o$o4 que ahora $pache requiere la asignaci&n del signo M cuando se emplee adems un signo / ' de no hacerlo, "allarI Either all Options must start with + or -, or no Option may 2ara que no "alle, siem&re que se agregue un - )desacti+ar, a una opci&n, se 'e!er( agregar un 5 )acti+ar, a las opciones que no se est*n desacti+andoI <Directory /nuevo/directorio/> Options -Indexes +FollowSymLinks ... </Directory> BPOR *U> EL (IRTUALHOST DEBE LLE(AR LA E%TENSIN +CONFC 5inceramente, esta me resulta una de las polticas menos justi"icables de la historia. 6a e)tensi#n* 'e un ar"hivo no es ms que parte del nombre del archi+o ' no re&resenta en a!souto e ti&o 7.7E 'e ar"hivo, como el sistema operati+o pri+ati+o de las 'entanitas ha querido imponer. The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 11 1ntonces 6para qu* agregar un .conf a los archi+os7 (odo archi+o que est* dentro de sites)ena*led debera ser cargado como 5irtual6ost porque 6qui*n colocara all un archi+o que no "uese un 5irtual6ost habilitado7 5in embargo, apache2.conf en el paquete compilado por Bbuntu 4K.LK, decide establecer que solo los archi+os con e0tensi&n .con" sean cargados como sitios habilitadosI # Include the virtual host configurations: #ncludeOptional sites)ena*led/+.conf :Nu* chiste; 8uien "oo"ase en sites-enaled un ar"hivo que no &ertene0"a a un $irtualHost ha!iita'o, estar%a sien'o 'esor'ena'o e in"oherente. 1s por ello, que una buena prctica sera cargar todos los archi+os que estu+iesen en ese directorioI Include!"tional sites-enaled/# .e esa "orma, a e)tensi#n 'e os $irtualHost +a no ser%a un &ro!ema. YA NO SE TRATA DE UNA MALA DECISIN, SE TRATA DE UN BUG+++ 8 esta +e- no es responsabilidad de Bbuntu. 5ucede que en la +ersi&n A.K de $pache ' al menos hasta la A.K.4L a a"tiva"i#n 'e a o&"i#n $ulti%iews genera un ,ao en $odRewrite "uan'o a 9:. "ontiene &arte 'e nom!re 'e un ar"hivo e)istente. MultiViews es una opcin que permite lo que se denomina negociacin de contenido a travs del mdulo Negotiation !uando se solicite a tra+*s de la BHD un archi+o ine0istente, Mod&e(otiation permitir a $pache e"ectuar una b#squeda por patr&n ' ser+ir aquel archi+o que primero coincida con dicha b#squeda. .e esta "orma, si se solicitase el archi+o /foo en la BHD, se ser+ira el primer archi+o cu'o nombre coincidiera con la palabra foo, pudiendo tratarse de foo.php, foo.pn(, etc. 2ero siempre ser el archi+o que primero coincida en la b#squeda. !uando se trabaja con el m&dulo Rewrite acti+ado ' se implementa un sistema de BHLs +irtuales )conocidas entre los usuarios ' pro"esionales del mar=eting como "riendl& >?.s, toda solicitud e"ectuada a tra+*s de la BHD, es primero manejada por ModRewrite ' solo cuando esto no sea posible, tomara el mando Mod&e(otiation, pues para eso ha sido creadoI para tratar de solucionar el problema cuando todo lo The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 12 dems "alle. .e esta "orma, si se posee una regla de reescritura como la siguienteI RewriteRule - whatever.php (oda solicitud )absolutamente toda, debera ser redirigida por ModRewrite al archi+o whatever.php ' esto, es lo que suceda hasta la aparici&n de la +ersi&n A.K de $pache.
1n esta nue+a +ersi&n, cuando /archivo)'ue)no)e$iste es solicitado, whatever.php es ser+ido. 5in embargo, al solicitar /si)e$isto el archi+o si)e$isto.php es ser+ido al igual que la petici&n literal /otro)archivo)'ue)e$iste.php se sir+e de "orma directa. Bn error garra"al que si bien no compromete la seguridad de "orma directa, podra ponerla en riesgo considerando que la implementaci&n de reglas de reescritura suele utili-arse para enmascarar las +erdaderas >?@s. Esto mismo es o que re&ort/ "omo bug a A&a"he; httpsI<<issues.apache.org<bug-illa<showObug.cgi7idP9QRRJ $l momento de escribir este artculo, el reporte es mu' reciente ' por lo tanto, no se pueden esgrimir conjeturas de ning#n tipo sobre el tratamiento que se le ha'a dado al mismo. .ado que a di"erencia de los dos casos anteriores, aqu se trata de un bug, no e)iste sou"i#n &osi!e hasta que no se im&emente una a nive 'e core 'e A&a"he. %o obstante, &ue'e im&ementarse una me'i'a &rovisoria para impedir que el bug se re"leje en nuestros hosts. Lo que debe hacerse en 'esa"tivar a o&"i#n $ulti%iews. Lamentablemente, la desacti+aci&n de esta opci&n, im&e'ir( a nego"ia"i#n 'e "onteni'o ' "rente a reglas tales comoI RewriteRule ./-static0 whatever.php La solicitud de /static/i(/foo N<* sera negociada como /static/i(/foo.pn( pro+ocando entonces, un error KLK %ot Eound. =ale aclarar que a 'esa"tivar a o&"i#n $ulti%iews en un directorio, no ser( &osi!e a"tivara en ninguno 'e sus su!'ire"torios, de manera tal que la acti+aci&n en un caso como el siguiente, sera absolutamente ignorada por $pacheI <Directory /foo/> Options )#nde$es 1FollowSy!in"s -$ulti%iews </Directory> <Directory /foo/*ar> # La activacin de la opcin ulti!iews a"u#, ser#a ignorada # ya "ue $ar es su$directorio de foo Options +$ulti%iews </Directory> The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 13 NO(EDADES SOBRE ,ACKTHESTRIPPER Y EUROPIOCODE Servi'ores Seguros en un soo &aso "on =a">?heStri&&er %ac&The'tripper, el deplo&er para ser'idores que en un solo paso instala! configura # asegura un servidor (eb completo sobre )buntu *+",-, ahora se encuentra disponible para m4ltiples distribuciones & 'ersiones gracias al aporte de %ason 'oto Las distribuciones ' +ersiones soportadas al momento son las siguientesI =ersiones adaptadas por =ason SotoI 9!untu 14-04 6?S Cent<S @ Cent<S A Be!ian @ Be!ian A =ersiones o"icialesI 9!untu 12-04 6?S; 2gina S .escarga S !&digo Euente anual del Bsuario )apto para todas las +ersiones ' distribuciones, =ideotutorial Euro&ioCo'e + una nueva i!rer%a &ara C+thon .uropio/ode, el codificador de caracteres basado en modelos permisi'os & empleado por el n4cleo EuropioEngine, ahora se encuentra disponible (aunque a4n en desarrollo) para 0#thon +"1 & 0#thon 2"3 siendo apto tanto para aplicaciones ;eb como 3es=top e incluso en el %cripting .ocumentaci&nI anual completo de 1uropio!ode )inclu'e notas para el desarrollador ' manual del usuario, Libreras disponiblesI =avaS"ri&t )+ersi&n estable,I para en+o codi"icado de "ormularios desde el <rontAEnd CDC )+ersi&n estable,I codi"icaci&n, decodi"icaci&n ' "unciones de re'ersing, limpie-a ' depuraci&n de strings C+thon )+ersi&n en desarrollo,I codi"icaci&n ' decodi"icaci&n de strings The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 14 TUI9 TE%T USER INTERFACES EN GNU)BASH Y PYTHON Eugenia Bahit agradece a Hugo (@huguidugui) por la revisin ortogrfica de este artculo LA CREACIN DE INTERFECES DE TE%TO PARECE SER ALGO OL(IDADO EN ESTE SIGLO+ SIN EMBARGO, EN EL MUNDO DE LOS SER(IDORES DONDE LOS ENTORNOS GRAFICOS NO DE,ARAN DE SER UNA MOLESTIA INNECESARIA, LAS TUI NO PARECEN TENER FECHA DE CADUCIDAD+ ucho se habla )' hablo, de las TBD )Braphical >ser @nter"aces, pero de las ?9. )Ce-t >ser @nter"aces, nos ol+idamos de su e0istencia hasta que aparece alguien que nos lo recuerda ' eso, "ue lo que sucedi& das atrs en CDitter cuando un usuario me preguntaba c&mo crearlas.
$ ra- de lo anterior ' tras haberle comentado que antiguamente,
empleaba dialo( para T%B<Bash ' ncurses en ! ' 2'thon. 3ialog, siempre me haba resultado simple ' sencillo de utili-ar ' jams me haba dejado con sensaci&n de insatis"acci&n 'a que tena todo que un programador podra necesitar para la (BD de su %cript o aplicaci&n ' entonces me surgi& la pregunta 1&or qu/ no utii0a!a dialog en C+thon2 8 as "ue que me surgieron unas ganas tremendas de escribir una gua sobre este tema del cual en ms de 49 a?os no he escrito nunca. :1spero que la dis"ruten; Nuiero comen-ar primero por introducirlos en el mundo dialo( de T%B<Bash para que puedan ir "amiliari-ndose con esta herramienta. 1l sitio Ee! o,i"ia de dialo( es httpI<<in+isible/island.net<dialog< ialog comen! en "##$ de la mano del programador Savio Lam pero desde "### es escrito y mantenido por Thomas . !ic"ey, creador de Lyn#, ncurses y #term %entre muchas otras herramientas% quien lamenta&lemente decidi$ cambiar la original licencia %PL del programa por L%PL, permitiendo as que cualquier persona pudiese crear me'oras privativas ale'ndolas as del alcance de la comunidad y de su consecuente estudio. The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 15 B*U> ES DIALOGC 3ialog es una herramienta que pro+ee de pseudo inter"aces gr"icas )o inter"aces gr"icas te0tuales, para nuestras aplicaciones de consola. 1ntre los tipos de artilugios disponibles, se encuentran los cuadros de dilogo )si<no,, calendarios, entradas de te0to, listas desplegables, etc. BCMO SE OBTIENEC 3ialog puede instalarse directamente desde repositorios. 1n Be!ian ' deri+adosI & apt)(et install dialog CASOS DE USO 1l uso ms "recuente de las (BD es en el %cripting ' programas de consola en general. ediante el comando an dialo( se puede acceder a toda la a'uda del programa ' obtener as, detalles claros sobre su sinta0is ' argumentos, lo que nos podra dar una idea ms amplia de sus posibles usos. La sinta0is bsica para utili-ar dialo( esI dialog ))opciones)counes ))tipo)de)di2lo(o 34ontenido3 alto ancho ))opciones)del)di2lo(o The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 16 Ca$a 'e 'i(ogo norma; 7ostran'o a in,orma"i#n 'e sistema o&erativo #%&$in&$ash # 'rchivo: programa(sh syste5info67ls*5release )ds7 syste5codenae67ls*5release )cs7 read )d 88 s(5*ienvenida << 9OF :ienvenido al pro(raa de instalaci;n de <ac"=heStripper para >syste5info />syste5codenae0. ?ara continuar, pulse en el *ot;n %ceptar. 9OF dialo( @ ))*ac"title 3<ac"=heStripper3 @ ))title 3#nforaci;n del Sistea3 @ ))s(*o$ 3>s(5*ienvenida3 @ AB CB 1l c&digo anterior producir un dilogo como el siguienteI 5i deseas probar el c&digo anterior )' los siguientes, ' a#n no sabes c&mo hacerlo, abre un terminal ' procura seguir estos pasosI 4. !rear un archi+oI touch pro(raa.sh A. $sgnale permisos de ejecuci&nI chod 1$ pro(raa.sh J. $bre el archi+o anterior con cualquier editor de te0tos, copia el c&digo ' p*galo en el archi+o programa.sh. K. (ras guardar el archi+o, ejec#talo desde la terminal escribiendoI ./pro(raa.sh The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 17 Bi(ogo 'e "on,irma"i#n; Con,irman'o antes 'e a"tuar #%&$in&$ash syste5info67ls*5release )ds7 syste5codenae67ls*5release )cs7 read )d 88 s(5*ienvenida << 9OF :ienvenido al pro(raa de instalaci;n de <ac"=heStripper para >syste5info />syste5codenae0. 9ste pro(raa instalar2 todo lo necesario para ontar un servidor De* copleto incluidas las herraientas de se(uridad indispensa*les para antener su servidor a salvo. E9st2 de se(uro de continuarF 9OF dialo( @ ))*ac"title 3<ac"=heStripper3 @ ))title 3#nforaci;n del Sistea3 @ ))yesno 3>s(5*ienvenida3 @ AG HB 1l c&digo anterior producir un dilogo como el siguienteI La opci&n elegida por el usuario, ser capturada ' representada comoI BPU5, APU%o, 2GGPUcualquier tecla de escape que cancel& la operaci&n. Bn ejemploI respuesta6>F case >respuesta in B0 cd cd deployyserverI sudo ./ds.shII # e)ecuta el archivo de instalacin A0 r )R deployyserverII # Elimina los archivos descargados 2GG0 echo 3:ye.3II # *o hace nada e imprime un mensa)e en pantalla esac The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 18 7enF; Eigien'o o&"iones 'e un menF #%&$in&$ash syste5info67ls*5release )ds7 syste5codenae67ls*5release )cs7 read )d 88 s(5*ienvenida << 9OF :ienvenido al pro(raa de instalaci;n de <ac"=heStripper para >syste5info />syste5codenae0. ?or favor, eliJa una opci;n para continuarK 9OF dialo( @ ))*ac"title 3<ac"=heStripper3 @ ))title 3Opciones3 @ ))enu 3>s(5*ienvenida3 @ AG HB ' @ Instalar 3#nstalar y confi(urar todo el sistea3 @ (escargar 3Solo descar(ar los archivos3 @ Salir 3Salir3 1l c&digo anterior producir un dilogo como el siguienteI 1l n#mero 3 corresponde a la cantidad de opciones del men# que sern +isibles )resaltado en rojo en el c&digo,. Las siguientes lneas corresponden a cada uno de los tem del men#, siendo la string de la i-quierda, el +alor que ser almacenado por dialo(. 2uede capturarse dicho +alor almacenndolo en un archi+o temporalI dialo( @ ... #nstalar 3#nstalar y confi(urar todo el sistea3 @ Descar(ar 3Solo descar(ar los archivos3 @ Salir 3Salir3 )* /tm"/o"cion-elegida cat /tp/opcion)ele(ida The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 19 G tambi*n se podra capturar en una +ariable, agregando la opci&n com#n ))stdout, aunque no es la "orma ms recomendada por su autorI salida+,-dialo( --stdout @ ))*ac"title 3<ac"=heStripper3 @ ))title 3Opciones3 @ ))enu 3>s(5*ienvenida3 @ AG HB L @ #nstalar 3#nstalar y confi(urar todo el sistea3 @ Descar(ar 3Solo descar(ar los archivos3 @ Salir 3Salir3. echo ,salida See"tor 'e ar"hivos + 'ire"torios; Eigien'o un 'ire"torio 'e instaa"i#n #%&$in&$ash directorio6>/dialo( @ ))stdout @ ))*ac"title 39uropio 9n(ine #nstaller3 @ ))dselect ,/!$0/ @ # utili+ar --fselect en ve+ de ,dselect para seleccionar archivos AG MB0 cd >directorio 1l c&digo anterior producir un dilogo como el siguienteI The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 20 LO MISMO PERO DESDE PYTHON L&gicamente que los dilogos +istos anteriormente, son solo una mera introducci&n a la larga lista de artilugios pro+istos por dialo(. Give> Hite escribi& una e0celente gu%a so!re 'hell 'cripting + en la cual dedica un "a&%tuo so!re dialog ' que te puede resultar mu' interesante. 2ero teniendo 'a una +isi&n general sobre dialo( ' sus usos, hablar de la librera "yt1ondialog ser mucho ms sencillo. C+thonBiaog )p'thondialog.source"orge.net, puede instalarse mediante un simple pip, disponiendo de las +ersiones para 2'thon A ' J de "orma separadaI eu(eniaNcococha)(nucitaKO> "i" searc1 "yt1ondialog pythondialo( ) % ?ython interface to the P&#Q dialo( utility ... python2)pythondialo( ) % ?ython interface to the P&#Q dialo( ... /?ython 2 *ac"port0 eu(eniaNcococha)(nucitaKO> eu(eniaNcococha)(nucitaKO> sudo "i" install "yt1on)-"yt1ondialog 1mplear esta librera es tan sencillo comoI 4. importar la clase Dialo( del m&duloC A. crear una instancia de la clase ' comen-ar a crear cuadros de dilogo. Los cuadros de dilogo se crean mediante m*todos del objeto Dialo(, cu'os nombres equi+alen a los di+ersos tipos de dilogos pro+istos por dialo(. Los argumentos de opci&n que antes se pasaban con ))opcion ahora se pasan como cla+es )=e&Dord args,. .e esta "orma, para crear un cuadro de dilogo normal, bastara con las siguientes instruccionesI #%&usr&$in&env python # --- coding: utf-. --- fro dialo( iport Dialo( dialo( 6 Dialo(/0 dialo(.s(*o$/title6u3=Rtulo3, te$t6u3MensaJe del cuadro de di2lo(o30 respuesta 6 dialo(.yesno/title6u3=Rtulo3, te$t6u39st2 se(uro de continuarF30 if respuesta 66 8o"8K print 39st2 se(uro3 elif respuesta 66 8cancel8K print 3&o. &o esta*a se(uro3 !laro que no todo es color de rosa ' algunas di"icultades se pueden presentar. La ms notable de ellas es para los hispanoparlantes, el problema eterno con los caracteres no $5!DD en 2'thon. %o basta con de"inir la codi"icaci&n de caracteres como B(E/R al inicio. 2ero se pueden e+itar todos los con"lictos empleando cadena.decode/8utf)S80 como se muestra a continuaci&nI A httpI<<bash.c'berciti.bi-<guide<ainO2age J httpI<<bash.c'berciti.bi-<guide<BashOdispla'OdialogObo0es The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 21 #%&usr&$in&env python # --- coding: utf-. --- fro dialo( iport Dialo( dialo( 6 Dialo(/0 dialo(.s(*o$/title6u3=Rtulo3, te$t6u3MensaJe del cuadro de di2lo(o30 respuesta 6 dialo(.yesno/title6u3=Rtulo3, te$t6230st4 seguro de continuar52.decode-6utf-76.0 if respuesta 66 8o"8K print 39st2 se(uro3 elseK print 3&o. &o esta*a se(uro3 Luego, las opciones comunes pueden setearse mediante m*todos, aunque en +ersiones recientes no son del todo intuiti+os. 2or ejemploI dialo( 6 Dialo(/0 dialo(.set8ackground8title/3=Rtulo del pro(raa30 1s la +ersi&n moderna deI dialo( 6 Dialo(/0 dialo(.add8"ersistent8args/T3))*ac"title3, 3=Rtulo del pro(raa3U0 %inguno de los dos es demasiado intuiti+o pero tal +e-, en la "orma correspondiente a las +ersiones anteriores, con solo recordar un m*todo, bastaba para de"inir la lista con el argumento original ' su +alor. 1l sitio Veb o"icial es httpI<<p'thondialog.source"orge.net< pero no posee ms que unos pocos ejemplos. 5in embargo, siempre podemos hacer unI eu(eniaNcococha)(nucitaKO> "yt1on ... >>> from dialog im"ort (ialog >>> 1el"-(ialog. Lo anterior, nos permitir acceder a una documentaci&n mu' completa sobre esta librera. 6i recomendaci&n7 2rueba primero jugar con dialo( en T%B<Bash. 1nti*ndelo, dis"r#talo ' encuentra una utilidad. Heci*n all, comien-a a e0perimentar desde 2'thon pero 'a, con una idea ms concreta ' una necesidad de uso real. .e esa "orma, logrars mejores resultados. The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 22 PYTHON WEB SIN FRAMEWORKS9 SOBRE LAS SESIONES Y EL ACCESO RESTRINGIDO Eugenia Bahit agradece a Hugo (@huguidugui) por la revisin ortogrfica de este artculo BEAKER ES UN MIDDLEWARE PARA WSGI *UE PERMITE, ENTRE OTRAS CARACTER'STICAS, EFECTUAR UN MANE,O DE SESIONES A(AN&ADO EN APLICACIONES WEB CREADAS CON PYTHON+ SU IMPLEMENTACIN ES (ERDADERAMENTE SENCILLA Y SE LOGRA EN POCOS PASOS+ oco a poco, la ingeniera de 5o"tware tras haber ganado terreno en el mbito Veb, se est +olcando ms por 2'thon ' cada +e- son ms los programadores que le pierden el miedo a lo desconocido ' se animan a hacer +erdadera ingeniera creando aplicaciones sin recurrir a 3#ango o a otros "rameDor=s de similares caractersticas. 2 1n el desarrollo de aplicaciones Veb siempre ha sido la restricci&n de acceso ' el manejo de usuarios, un gran hito para los reci*n llegados. 1n lenguajes como 2@2 e0iste no solo un soporte nati+o para el manejo de sesiones 'e usuario* sino que adems, abunda la bibliogra"a al respecto. 2ero en lenguajes como 2'thon, la documentaci&n pareciera re"lejar que el manejo de sesiones de usuarios solo sera posible empleando "rameDor=s. 8 esto no es as. 2ero para pro"undi-ar a#n ms, es necesario primero, comprender de qu* se habla en realidad cuando hablamos de sesiones. 8 para ello, recomiendo leer el artculo Sesiones 1qu/ son reamente + en qu/ "onsisten2 I'esmiti,i"an'o e "on"e&to 'e sesionesJ* publicado en la edici&n %3Q de (he Griginal @acWer. Bna +ersi&n del artculo en 2.E puede obtenerse desde la siguiente BHLI httpI<<librar'.originalhacWer.org<search<sesiones SESIONES EN PYTHON !omo bien comenc* diciendo, 2'thon no tiene un soporte nati+o para la implementaci&n de sesiones ' el manejo de coo=ies suele ser algo engorroso con V5TD. 1sto, con+ierte al trabajo de desarrollar un manejador de sesiones en una tarea larga ' compleja de emprender, aunque no imposible. $qu, abarcaremos el manejo de sesiones empleando la librera Bea>er )httpI<<beaWer.readthedocs.org<en<latest<,. The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 23 PRIMEROS PASOS 5e utilice BeaWer, cualquier otra librera o se desarrolle una propia, las herramientas con las cules debe contarse sonI 9na !ase 'e 'atos "on a menos un usuario 'e &rue!a en una ta!a 'e usuarios -- /eempla+ar foo$ar por el nom$re de la $ase de datos a utili+ar PS9 foo*arI -- Estructura $ase de la ta$la usuarios 4R9%=9 =%:!9 usuarios / usuario5id #&=/AA0 &O= &P!! %P=O5#&4R9M9&= ?R#M%RV W9V, usernae V%R4X%R/2G0 &O= &P!!, password V%R4X%R/L20 &O= &P!! 0 9&Y#&96#nnoD:I -- 0suario de prue$a #&S9R= #&=O usuarios /usernae, password0 V%!P9S /8prue*a8, 8cSZL*adCSZ2H*MGHd*edLZMCBeCafdC280I cSZL*adCSZ2H*MGHd*edLZMCBeCafdC2 es el hash 7BK de la cla+e "ruea. Luego, necesitaremos un ,ormuario 'e ini"io 'e sesi#nI <for ethod68?OS=8 action68/usuarios/validar8> PsuarioK <input type68te$t8 nae68u8 id68usernae8><*r> 4laveK <input type68password8 nae68p8 id68password8> <*utton type68su*it8>#n(resar</*utton> </for> 2or consiguiente, un m&dulo de usuarios )usuarios."y, con un re"urso &F!i"o en"arga'o 'e mostrar e ,ormuarioI def in(resar/0K with open/8/ruta/a/for5lo(in.htl8, 8r80 as archivoK return archivo.read/0 Bna ,un"i#n vai'ar )en el m&dulo de usuarios, encargada de +eri"icar que los datos ingresados en el "ormulario anterior, coincidan con el de un usuario en la base de datos ' en caso a"irmati+o, in+oque al iniciador de sesi&n o de lo contrario, muestre nue+amente el "ormularioI fro hashli* iport hashli* fro core.postdata iport ?OS=DataXandler, ?OS=Data4leaner fro core.d*layer iport run5'uery fro core.sessions iport iniciar # 1O2O The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 24 9:!S;(ata/andler def validar/5?OS=0K # application de$er3 enviarle environ como par3metro usuario 6 ?OS=Data4leaner/0.saniti[e5strin(/5?OS=T8u8U0 clave 6 hashli*.dG/5?OS=T8p8U0.he$di(est/0 s'l 6 333S9!94= usuario5id FROM usuarios DX9R9 usernae 6 8\s8 %&D password 6 8\s8333 \ /usuario, clave0 resultados 6 run5'uery/s'l0 return iniciar/0 if len/resultados0 66 A else in(resar/0 1l archi+o de sesiones )sessions."y, deber hospedarse a ni+el del core ' contar con al menos las "unciones para iniciar una sesi&n, destruirla ' +eri"icar una sesi&n acti+a )completaremos las "unciones ms adelante,I def iniciar/0K pass def destruir/0K pass def verificar/0K pass IMPLEMENTANDO BEAKER $nte todo, para poder utili-ar BeaWer ser necesario instalarlo desde 2'2iI sudo pip install *ea"er Luego, sern necesarios algunos cambios en nuestro controlador ' en la "unci&n application. 1l primer paso ser im&ortar e middle4areI fro *ea"er.iddleware iport SessionMiddleware $ continuaci&n, a ,un"i#n a""lication "am!iar( 'e nom!re )puede elegirse cualquier nombre, 'a que deber ser en+uelta por el middleDare ' *ste, ser quien responda ante la llamada de V5TDI def application/environ, start5response0K def start/environ, start5response0K The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 25 Einalmente, e middle4are envover( a a e) ,un"i#n a""lication ' *ste ser quien act#e ante la in+ocaci&n de V5TDI # 4onfiguraciones necesarias para el iddleware *ea"er5dic 6 ] 8session.type8K 8file8, 8session.coo"ie5e$pires8K =rue, 8session.auto8K =rue, 8session.data5dir8K 8/tp/sessions8, ^
a""lication + Session$iddleware-start< eaker8dic. EL ARCHI(O DE SESIONES $hora completaremos las "unciones de"inidas en el archi+o de sesiones. Las varia!es 'e sesi#n generadas por Bea=er, se encontrarn disponibles en la "ave eaker.session 'e 'i""ionario environ. La "unci&n de iniciali-aci&n de sesi&n se encargar de crear +ariables de sesi&n que nos a'uden a identi"icar si un usuario se encuentra logueado en nuestro sistema. !rearemos A +ariables de sesi&nI lo((ed )booleana, ' usernae )string,. 2ara lograrlo, ser necesario contar con el diccionario environ por lo cual, primero, modi"icaremos la "unci&n validar/0 de usuarios.py )para que nos pase este parmetro,I N?OS=DataXandler def validar/5?OS=, environ0K usuario 6 ?OS=Data4leaner/0.saniti[e5strin(/5?OS=T8u8U0 #((( return iniciar/environ< usuario0 if len/resultados0 66 A else in(resar/0 8 ahora s, completaremos la ,un"i#n iniciar creando las nue+as +ariables de sesi&nI def iniciar/environ, usernae0K environT8*ea"er.session8UT8lo((ed8U 6 =rue environT8*ea"er.session8UT8usernae8U 6 usernae 2ara 'estruir una sesi#n bastar con in+ocar al m*todo delete/0 /creado por BeaWer/I def destruir/environ0K environT8*ea"er.session8U.delete/0 8 para "inali-ar este archi+o, a ,un"i#n que veri,i"a a sesi#n ser la "rutilla del postre I, 1sta "unci&n se encargar de buscar las +ariables de sesi&n dentro de *ea"er.session en environ. .e encontrarla nada malo podra pasar pero de no encontrarla, deber destruir las e+entuales +ariables de sesi&n residuales que puedan quedar e in+ocar a la "unci&n de solicitud de datos del m&dulo de usuarios. 2or esto moti+o, la ,un"i#n veri,i"ar ser un decorador que en+uel+a a aquellas "unciones cu'o acceso se The Original Hacker www.originalhacker.org 2013, 2014 Eugenia Bahit www.eugeniabahit.com Bajo Licencia Creative Commons BY-NC-SA 26 encuentre restringido. =eamos c&mo lo lograrI fro usuarios iport in(resar def verificar/funcion5restrin(ida0K def wrapper/+ar(s, ++"war(s0K # 4omien+o diciendo "ue el usuario no est3 logueado hasta compro$arlo usuario5lo(ueado 6 False # O$tengo el diccionario environ 5suponiendo es el primer argumento6 environ 6 ar(sTBU # !erifico si las varia$les de sesin est3n disponi$les e$iste5var5lo((ed 6 8lo((ed8 in environT8*ea"er.session8U e$iste5var5unae 6 8usernae8 in environT8*ea"er.session8U # 7i est3n disponi$les, modifico el valor de usuario8logueado con el de logged if e$iste5var5lo((ed and e$iste5var5unaeK # o$tengo el valor de la varia$le logged usuario5lo(ueado 6 environT8*ea"er.session8UT8lo((ed8U # 7i el usuario est3 logueado, devuelvo la funcin decorada if usuario5lo(ueadoK return funcion5restrin(ida/+ar(s, ++"war(s0 # 7ino, destruyo residuales y devuelvo la funcin para loguearse elseK destruir/0 return in(resar/0 return wrapper SWITCHEANDO SOLICITUDES EN EL CONTROLADOR Bna +e- preparados los m&dulos de usuarios ' sesiones ' adaptado el controlador, habr que sDitchear las BHL teniendo en cuenta la siguiente tabla de re"erenciaI A""i#nLMun"ionai'a' 9:6 Mun"i#n a invo"ar I&ar(metrosJ .ngresar a sistema )muestra "ormulario de logueo, /usuarios/in(resar usuarios.in(resar/0 Geri,i"ar os 'atos 'e loguin )action del "ormulario anterior, /usuarios/validar usuarios.validar/environ, environ0 Minai0ar una sesi#n /usuarios/salir sessions.destruir/environ0 RESTRINGIR EL ACCESO 2ara restringir el acceso a una "unci&n determinada solo bastar con decorarla con la "unci&n +eri"icar del m&dulo de sesionesI fro core.sessions iport verificar 9verificar def funcion5con5acceso5restrin(ido/0K pass 409272207688 409272207688 9