Title: Lenguajes tipo Script
1Lenguajes tipo Script
2Contenido
- Bases de datos, gráficos, coreos.
- Programación CGI
- Seguridad en Perl
3Bases de datos
- Definición de BD
- Es una colección de datos relacionados entre sÃ.
- Modelos de BD
- Jerárquico
- De red
- Relacional
- Orientado a objetos
- BD deductivas
4Bases de datos
- Sistema manejador de bases de datos (SMBD).
- Permite almacenar, relacionar y consultar
información. - En un SMBD relacional consta de tres lenguajes
- DDL Lenguaje de definición de datos
- Bases de datos que contienen tablas
- Tablas que contienen campos (columnas)
- DML Lenguaje de manipulación de datos
- Insertar, consultar, modificar y borrar datos
- DCL Lenguaje de control de datos
- Especifica quién puede accesar los datos.
5Bases de datos
- Perl y DBI
- El módulo DBI se usa para manipular una base de
datos relacional, como Oracle, Access, SQL
Server, MySQL, etc. - DBI significa Data Base Interface y supone una
capa de alto nivel para acceder a una base de
datos, permitiendo escribir un código Standard
que nos sirve para todas las BD. - Requiere de un módulo DBD (Data Base Driver), de
la base de datos correspondiente. - Ej. DBDOracle.
6Bases de datos
Common Gateway Interface
Interfaz Propietaria
Manejador de Interfaz
HTTP Protocolo
Interfaz DBI
Interfaz DBD
Navegador Web
Servidor Web
Script CGI
Módulo DBI
Módulo DBD Oracle
Manejador de la BD
Interfaz DBD
Interfaz Propietaria
Manejador de Interfaz
Módulo DBD MySQL
Manejador de la BD
7Bases de datos
- Uso del módulo DBI
- Primero se debe cargar el módulo DBI
- use DBI
- Conectar con la base de datos
- dbh DBI-gtconnect (DBImysqldbhostname,
user, password) - Sentencias SQL
- Abrir un cursor. Operación de consulta (SELECT)
- stm dbh-gtprepare(SELECT FROM prueba)
- stm-gtexecute()
- Obtener los resultados
- while( _at_data stm-gtfetchrow_array()
- print DATA _at_data\n
-
- Cerrar el cursor
- stm-gtfinish()
- Cerrar la conexión con la BD
- dbh-gtdisconnect
- Terminar
- exit
8Gráficos
- Módulo GD
- Mediante éste módulo es posible generar de forma
fácil cualquier dibujo sencillo y exportarlo a
los formatos gráficos más comunes como JPEG, GIF. - Define las siguientes clases
- GDImage.
- GDFont
- GDPolygon
9Gráficos
use GD Creamos el objeto Image que contiene el
dibujo im new GDImage(100,100)
Establecemos los colores a utilizar white
im-gtcolorAllocate(255,255,255) black
im-gtcolorAllocate(0,0,0) red
im-gtcolorAllocate(255,0,0) blue
im-gtcolorAllocate(0,0,255) Hacemos el fondo
transparente y entrelazado im-gttransparent(white
) im-gtinterlaced('true') Dibujamos un
rectángulo Negro que bordea la figura im-gtrectang
le(0,0,99,99,black) Dibujamos un óvalo
azul im-gtarc(50,50,95,75,0,360,blue)
Rellenamos la figura en rojo im-gtfill(50,50,red)
Grabamos la imagen en un fichero open IMG,
gtimagen.jpg binmode IMG print IMG
im-gtjpeg close IMG
10Correo
- Módulo Mail
- Una de las tareas que frecuentemente realiza Perl
es la lectura y/o envÃo de correo electrónico,
para esto se puede utilizar el módulo Mail.
11Correo
Ejemplo para enviar un Mail use
MailSendmail mail ( To gt
'su_direccion_at_alli.com', From gt
'mi_direccion_at_aqui.com', Message gt "Mensaje de
prueba" ) if (sendmail mail) print "Mail
enviado correctamente.\n" else print "Error
al enviar mail MailSendmailerror\n"
12Correo
Ejemplo para leer el Mail use
MailPOP3Client pop new MailPOP3Client(
USER gt "el_usuario", PASSWORD gt
"la_contraseña", HOST gt "pop3.servidor.com" )
foreach ( pop-gtHeadAndBody( 1, 10 ) ) print
_, "\n" pop-gtClose
13Programación CGI
Sitio Web
Sistema del Usuario
CGI
Servidor Web
Programa CGI
Visor Web (Netscape, Explorer)
Ficheros de disco
Base de datos
Documentos HTML
14Programación CGI
- Configuración del servidor
- Para que un servidor puede ejecutar CGI, hay que
configurar adecuadamente el daemon. -
- Si se utiliza el servidor CERN, editar el
fichero httpd.conf, donde se encuentra una lÃnea
como - exec /cgi-bin/ /home/www/cgi-bin/
-
- Si se utiliza el servidor de NCSA, editar el
fichero srm.conf, añadiendo una lÃnea del tipo -
- ScriptAlias /cgi-bin/ /home/www/cgi-bin/
15Programación CGI
- Ejecutar script de CGI
- Se requiere determinar dos cosas
- Cómo y dónde almacenar el script en el servidor
- Cómo invocarlo desde el cliente
- El script debe almacenarse en un directorio
llamado cgi-bin, puede ser dentro del directorio
public_html - La manera más fácil de ejecutar un CGI es
simplemente poniendo un vÃnculo con el comando a
ejecutar
16Programación CGI
- Qué parte es Perl, y qué parte es html
- El formulario que se presenta al usuario está
escrito en html, y este llama al script en el
servidor escrito en perl. El script devolverá, en
la mayorÃa de los casos código html para
presentar al usuario.
17Programación CGI
Código HTML ltform method"POST"
action"http//lsc.fie.umich.mx/cgi-bin/chiste-env
io.pl"gt ltPgtTu nombre ltinput name"nombre"gtlt/Pgt ltP
gtEl chiste lttextarea cols60 rows5
name"chiste"gtlt/textareagtlt/Pgt ltPgtltinput
type"submit" value"Enviar"gtltBRgt ltinput
type"reset" value"Borrars"gtlt/Pgt lt/formgt
Script en Perl !/usr/local/bin/perl
chiste-envio.pl push(_at_INC,"/p/www/httpd/cgi-bin/")
require("cgi-lib.pl") ReadParse print
PrintHeader print "ltHTMLgtltHEADgt\n" print
"ltTITLEgtReconocimiento de chistelt/TITLEgt\n" print
"lt/HEADgtltBODYgt\n" print "Gracias
",in'nombre',",Tu envÃo será revisado lo antes
posible. .ltPgt\n " print "lt/BODYgtlt/HTMLgt\n"
18Programación CGI
- Pasarle valores a los CGIs al llamarlos
- GET El visor Web envÃa los datos del formulario
como una parte del URL que especifica el atributo
ACTION de la etiqueta FORM. Usando la misma forma
en que la llamada a programas en Perl desde la
lÃnea de órdenes lo harÃa, como argumentos. - Ejemplo
-
- !/usr/bin/perl
- composicion del documento a mostrar
- print "Content-type text/plain\n\n"
- if( ARGV lt 0 )
- print "NO hay argumentos \n"
- else
- print "SI hay argumentos (del 0 al ARGV)
\n" - for(i0 i lt ARGV i)
- print "i ARGVi \n"
-
-
19Programación CGI
- Pasarle valores a los CGIs al llamarlos
- POST El visor Web utiliza el comando HTTP POST e
incluye los datos del formulario en el núcleo del
comando, por lo que no aparecen en la URL. El
servidor Web utiliza la entrada estándar del
programa CGI. Los pasos para obtener los valores
son los siguientes - Obtener la longitud de la entrada mediante
CONTENT_LENGTH. - Extraer los pares nombrevalor divididos por
- En cada par, convertir todas las secuencias xx
en los caracteres ASCII equivalentes. - En cada par nombrevalor, convertir todos los
caracteres en espacios.
20Programación CGI
- Cuándo utilizar GET y cuándo POST
- Se debe utilizar GET cuando
- El volumen de la información sea pequeño.
- Se desea acceder a un programa CGI sin usar un
formulario. - Cuando no se desee alterar nada en el servidor.
- Se debe utilizar POST cuando
- El volumen de la información sea elevado.
- Cuando las operaciones sean más complejas que
simplemente las lecturas, como podrÃa ser la
actualización de registros en una base de datos.
21Programación CGI
- Paso de parámetros del servidor al CGI
- Variables de ambiente o entorno
22Programación CGI
- Devolución de datos desde el programa CGI.
- Independientemente de cómo se transfiere la
información (Web-CGI), el CGI siempre devuelve
información al servidor Web escribiendo en la
salida estándar. - Además de datos se envÃa una pequeña información
de cabecera que debe figurar al comienzo, la cual
indica el tipo de salida que se va a dar como
resultado. El tipo de documento se especifica en
una lÃnea del tipo - Content-type tipo_MIME
- donde tipo_MIME puede ser
- text/html
- text/plain
- image/gif
- image/jpeg
- video/mpeg
- etc.
23Seguridad en Perl
- Como un programa CGI es un ejecutable, es
equivalente a dejar a el mundo ejecutar un
programa en el sistema. - Son necesarias una serie de precauciones de
seguridad. - Los programas CGI residen en un directorio
especial, que esta bajo el control del webmaster,
prohibiendo al usuario crear programas CGI
24Seguridad en Perl
- Escribir scripts CGI seguros
- Siempre que un programa interactúa con un cliente
por la red, existe la posibilidad deque el
cliente ataque al programa para conseguir un
acceso. El script más inocente puede ser muy
peligroso para la integridad del sistema. - Se debe tener cuidado con sentencias como eval
que permiten construir una cadena y dejar al
intérprete que la ejecute. - Un cliente correcto evitará los caracteres que
tienen un significado especial para el
intérprete. - Si se utilizan datos del cliente para construir
llamadas popen() o system(),se debe poner un
backslash delante de caracteres especiales.