PDF de programación - the original hacker 05 201404

Imágen de pdf the original hacker 05 201404

the original hacker 05 201404gráfica de visualizaciones

Publicado el 11 de Julio del 2017
2.342 visualizaciones desde el 11 de Julio del 2017
895,0 KB
33 paginas
Creado hace 10a (28/04/2014)
THE ORIGINAL HACKER
SOFTWARE LIBRE, HACKING y PROGRAMA-
CIÓN, EN UN PROYECTO DE

EUGENIA BAHIT



@eugeniabahit

GLAMP HACKER Y
PROGRAMADORA EXTREMA
HACKER ESPECIALIZADA EN PROGRAMACIÓN
EXTREMA E INGENIERÍA INVERSA DE CÓDIGO
SOBRE GNU/LINUX, APACHE, MYSQL,
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, THE LINUX
FOUNDATION LINUXFOUNDATION.ORG E
INTEGRANTE DEL EQUIPO DE DEBIAN
HACKERS DEBIANHACKERS.NET.

CREADORA DE PYTHON-PRINTR, EUROPIO
ENGINE, JACKTHESTRIPPER. VIM CONTRI-
BUTOR. FUNDADORA DE HACKERS N'
DEVELOPERS MAGAZINE Y RESPONSABLE
EDITORIAL HASTA OCTUBRE '13.

Buenos Aires, 29 de Abril
de 2014

ÍNDICE DE LA
EDICIÓN NRO5

INGENIERÍA DE SOFTWARE: MANIPULACIÓN DE WEB
FORMS Y CARGA DE ARCHIVOS CON PYTHON Y WSGI
SBRE APACHE..................................3

EUROPIO ENGINE LAB: DICT OBJECT, UN NUEVO
CONCEPTO EN OBJETOS PARA LAS VISTAS EN PHP. 16

SEGURIDAD INFORMÁTICA: MODELOS DE SEGURIDAD
PERMISIVOS COMO MECANISMOS DE PREVENCIÓN DE
VULNERABILIDADES.............................20

BASH SCRIPTING AVANZADO: DIVERSAS FORMAS DE
IMPLEMENTACIÓN DE MENÚS DINÁMICOS............28

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

3

INGENIERÍA DE SOFTWARE:
MANIPULACIÓN DE WEB
FORMS Y CARGA DE
ARCHIVOS CON PYTHON Y
WSGI SBRE APACHE

TRABAJAR CON FORMULARIOS
HTML DESDE PYTHON Y
SOBRE TODO, MANEJAR LA
CARGA DE ARCHIVOS, ES
UNA DE LAS TAREAS MENOS
SENCILLAS A LA HORA DE
CREAR APLICACIONES WEB
SIN UTILIZAR FRAMEWORKS.
SIN EMBARGO, QUE NO SEA
LA MÁS SENCILLA NO
SIGNIFICA QUE SEA
IMPOSIBLE.

D

esde que Python comenzó a implementarse en el diseño
frameworks como Django o
de aplicaciones Web,
Web2Py han parecido ser la única alternativa posible

para desarrollar Software accesible mediante un navegador.

El auge de estos frameworks y por sobre todo, la gran publicidad
que los programadores menos experimentados en la Ingeniería de
Software basado en Web le han hecho a Django, lograron acercar a
miles de de usuarios que sin conocimientos de programación en
Python, podían desarrollar aplicaciones Web con tan solo aprender
a usar el framework.

Sabemos que la humanidad se mueve a base de abusos de
todo tipo y la Ingeniería de Software, no es ajena a ello. Tanto es así
que los usuarios que desarrollan aplicaciones Web utilizando
Django, desconocen por completo el lenguaje y carecen de
nociones básicas de programación, a un punto tal que en mucho
casos, se llega a creer imposible que puedan desarrollarse
aplicaciones Web en Python sin el uso de frameworks.

Hace un tiempo publiqué un paper en Debian Hackers1, sobre cómo crear un sitio Web en Python bajo
Apache sin utilizar frameworks2. Este artículo pretende continuar esta idea, otorgando al lector las
herramientas necesarias para manipular todo tipo de formularios Web incluyendo la carga de archivos al
servidor. Toda esta información puede complementarse con el material3 del curso de Desarrollo de
Aplicaciones Web con Python y MySQL que dicté durante 2012 y 2013 en cursos.eugeniabahit.com

1 www.debianhackers.net
2
3

http://www.debianhackers.net/una-web-en-python-sobre-apache-sin-frameworks-y-en-solo-3-pasos
http://www.cursosdeprogramacionadistancia.com/static/pdf/material-sin-personalizar-python.pdf

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

4

DECLARANDO EL ENCTYPE CORRECTO
En los formularios HTML, el atributo enctype se define cuando el método ha sido establecido como POST y su
finalidad es la de indicar en qué forma serán codificados los datos al enviarse el formulario.

<form id='something' method='post' action='/some/file' enctype='multipart/form-data'>
</form>

El atributo enctype puede tener 3 valores diferentes:

multipart/form-data
Codificación:
ninguna (los caracteres son enviados tal cual están, sin codificación previa)

Uso:
recomendado para manipular la carga de archivos

Delimitador de campos:
aleatorio (se obtiene mediante la clave CONTENT-TYPE del diccionario environ)

delimitador = environ['CONTENT-TYPE'].replace('multipart/form-data; boundary=', '')
# retornará algo como: -----------------------------17553758491697998425554867382

Formato recepción de datos:
Ejemplo para un formulario con dos campos de textos (nombre y edad)

-----------------------------17553758491697998425554867382
Content-Disposition: form-data; name="nombre"

Juan Pérez
-----------------------------17553758491697998425554867382
Content-Disposition: form-data; name="edad"

90
-----------------------------17553758491697998425554867382--

application/x-www-form-urlencoded
Codificación:
ASCII Hexadecimal. Los espacios en blanco se reemplazan por el signo +

Uso:
es el valor por defecto de todo formulario. Se recomienda para todos los formularios que no requieran
manipular la carga de archivos.

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

5

Delimitador de campos:
Signo &

Formato recepción de datos:
Ejemplo para un formulario con dos campos de textos (nombre y edad)

nombre=Juan+P%C3%A9rez&edad=90

Notar que la vocal “e” acentuada ha sido codificada como %C3% mientras que el espacio en blanco fue sustituido por el signo +

text/plain
Codificación:
ninguna (los caracteres son enviados tal cual están, sin codificación previa)

Uso:
desaconsejado

Delimitador de campos:
retorno de carro

Formato recepción de datos:
Ejemplo para un formulario con dos campos de textos (nombre y edad)

nombre=JuanPérez
edad=90

El uso del valor text/plain se desaconseja ya que al emplear el retorno de carro como delimitador, dificulta la
obtención de datos en bloques de texto que incluyan el salto de línea.

Para el común de los formularios, no es necesario declarar el enctype.

Declararlo como multipart/form-data si se trabajará con la carga de archivos.

MANIPULANDO DATOS DESDE PYTHON Y WSGI
Cuando se reciben datos mediante POST, siempre se necesita tener acceso a dos factores: el nombre de los
campos y su correspondiente valor. En Python, la forma lógica de asociar un nombre de campo a un valor, es
utilizar un diccionario:

datos = dict(campo1='valor del campo 1', campo2='valor del campo 2')

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

6

Lo que se debe lograr entonces, es crear un diccionario con dicha información convirtiendo los datos recibidos
en un diccionario.

La forma de lograr esta conversión, depende directamente del modelo de codificación con el que la
información haya sido enviada, es decir que depende del enctype que se haya declarado en el formulario.

Cuando se trabaja con WSGI los datos enviados por POST se almacenan en la clave wsgi.input del
diccionario environ (que WSGI entrega a la función application) y se obtienen leyendo dicho elemento
con el método read() tal como se muestra a cotinuación:

datos = environ['wsgi.input'].read()
Retornatará algo como: campo1=valor1&campo2=valor2

APPLICATION/X-WWW-FORM-URLENCODED
Recordemos que éste, es el valor por defecto de todo formulario. Si no se ha asignado un enctype, los datos
serán codificados siguiendo este formato.

Como el delimitador de campos es el signo &, podemos obtener una lista donde cada elemento sea un par
clave=valor

datos = environ['wsgi.input'].read().split('&')

Luego, en cada elemento de la lista, el signo = separa al nombre del campo de su valor correspondiente con lo
que ya tenemos todos los elementos necesarios para armar el diccionario:

datos = environ['wsgi.input'].read().split('&')

POST = {}

for par in datos:
campo, valor = par.split('=')
POST[campo] = valor

Recordemos que los datos son codificados en formato ASCII Hexadecimal y los espacios en blanco, sustituidos
por el signo +. Podemos volver los valores a su estado puro, utilizando la función unquote del módulo
urllib2 y reemplazando el signo + por un espacio en blanco:

from urllib2 import unquote

datos = environ['wsgi.input'].read().split('&')

The Original Hacker – www.originalhacker.org

®2013, 2014 Eugenia Bahit – www.eugeniabahit.com – Bajo Licencia Creative Commons BY-NC-SA

7

POST = {}

for par in datos:
campo, valor = par.split('=')
POST[campo] = unquote(valor).replace('+', ' ')

De esta forma, habremos obtenido un diccionario como el siguiente:

{
'nombre': 'Juán Pérez',
'edad': '65',
'nacionalidad': 'uruguaya'
}

Al cual podremos acceder utilizando el nombre de los campos como nombre de clave:

nombre = POST['nombre'] if 'nombre' in POST else ''
edad = POST['edad'] if 'edad' in POST else ''
nacionalidad = POST['nacionalidad'] if 'nacionalidad' in POST else ''

RECOGER GRUPOS DE DATOS
En cualquier formulario Web, es frecuente tener grupos de opciones bajo un mismo nombre. Es el caso de los
campos de tipo checkbox y los de tipo select múltiple:

<input type='checkbox' name='grupo_a' value='1' checked>Opción 1<br>
<input type='checkbox' name='grupo_a' value='2'>Opción 2<br>
<input type='checkbox' name='grupo_a' value='3' checked>Opción 3<br>

<select name='combo' size='3' multiple>
<option value='1'>Opción 1</option>
<option value='2'>Opción 1</option>
<option value='3'>Opción 1</option>
<option value='4'>Opción 1</option>
<option value='5'>Opción 1</option>

</select>

Cuando éste es el caso, los valores elegidos no son agrupados al momento de enviarse. Por el
contrario, el nombre del campo se repetirá tantas veces como opciones se hayan elegido.

Lo que se pretende entonces es, capturar las op
  • Links de descarga
http://lwp-l.com/pdf5193

Comentarios de: the original hacker 05 201404 (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad