You are on page 1of 53

Administracin PHP

Noviembre 2005

Jordi Llonch
jordi@laigu.net

http://creativecommons.org/licenses/by-sa/2.0/

Administracin PHP

ndice
Instalacin
Configuracin
Monitoraje
Seguridad
Consideraciones al programador
Recursos
2

Administracin PHP

Instalacin
Instalacin general en un sistema Fedora Core 3:
rpm -i php-4.3.9-3.i386.rpm
rpm -i php-mysql-4.3.9-3.i386.rpm
rpm -i php-pear-4.3.9-3.i386.rpm
Estos paquetes instalarn el intrprete de PHP y configurarn
Apache para la ejecucin de PHP como mdulo:
/etc/httpd/conf.d/php.conf
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
LoadModule php4_module modules /libphp4.so
DirectoryIndex index.php

Administracin PHP

Instalacin PEAR
Instalacin de las libreras PEAR:
Utilizaremos los siguientes comandos:

Ver paquetes instalados:

# pear list
INSTALLED PACKAGES:
= = = = = = = = = = = = =
PACKAGE
VERSION STATE
Archive_Tar
1.1
stable
Console_Getopt 1.2
stable
DB
1.6.2
stable
Mail
1.1.3
stable
...

Ver la lista de paquetes disponibles:

# pear list-all

Actualizar todos los paquetes:

# pear upgrade-all

Instalar un paquete:

# pear install PAQUETE

Administracin PHP

Instalacin PEAR
Comprobar la instalacin de PEAR:
Crearemos el siguiente script PHP:

<?php
require 'DB.php';
if (class_exists('DB')) {
print "ok";

} else {
print "failed";

}
?>

Administracin PHP

Configuracin: El archivo de configuracin


El archivo de configuracin (llamado php.ini a partir de PHP 4.0)
Ledo cuando arranca PHP:
Para las versiones como mdulo de servidor esto slo ocurre una
vez al arrancar el servidor web.
Para la versin CGI, esto ocurre en cada llamada.

Administracin PHP

Configuracin: Directivas generales

asp_tags boolean

Permite el uso de las etiquetas estilo ASP <% %> adems de las habituales
etiquetas <?php ?>. Tambin se incluye el atajo para imprimir variables <
%= $valor %>.
auto_append_file string

Especifica el nombre de un archivo que es incluido automticamente despus


del archivo principal. El archivo se incluye como si fuese llamado mediante
la funcin include(), as que se utiliza include_path.
El valor especial none desconecta la adicin automtica de archivos.
Nota: Si el script es terminado con exit(), no tendr lugar la adicin automtica.
auto_prepend_file string
Especifica el nombre de un archivo que es incluido automticamente antes
del archivo principal. El archivo se incluye como si fuese llamado mediante
la funcin include(), as que se utiliza include_path.
El valor especial none desconecta la adicin automtica de archivos.

Administracin PHP

Configuracin: Directivas generales

doc_root string
"Directorio raiz" de PHP en el servidor. Slo se usa si no est vaco. Si PHP
se configura con safe_mode, no se sirven archivos fuera de este
directorio.

engine boolean
Esta directiva slo es til en la versin de PHP como mdulo Apache. Se
utiliza para sitios que desean habilitar la ejecucin del PHP directorio por
directorio o en base a cada servidor virtual. Poniendo php_engineoff
en los sitios apropiados del archivo httpd.conf, se puede habilitar o
deshabilitar PHP.

Administracin PHP

Configuracin: Directivas generales

open_basedir string

Limita los archivos que se pueden abrir por PHP al rbol de directorios especificado.

Cuando un script intenta abrir un archivo con, por ejemplo, fopen o gzopen, se
comprueba su localizacin. Si el fichero est fuera del rbol de directorios
especificado, PHP se negar a abrirlo. Todos los enlaces simblicos son resueltos,
de modo que no es posible evitar esta limitacin usando uno de ellos.

El valor especial . indica que el directorio base ser aquel en el que reside el script.

Bajo Windows, separe los directorios mediante punto y coma. En el resto de sistemas,
seprelos con dos puntos ":". Como mdulo de Apache, los senderos para
open_basedir de los directorios padre se heredan automticamente.

El valor por defecto es permitir abrir todos los archivos.

gpc_order string

Fija el order de parseo de variables GET/POST/COOKIE. El valor por defecto de esta


directiva es "GPC". Fijndola, por ejemplo, a "GP", har que PHP ignore por
completo las cookies y que sobreescriba las variables recibidas por GET con las que
tengan el mismo nombre y vengan por POST.

ignore_user_abort string

Por defecto est a on. Si se cambia a off, los script terminarn tan pronto como intenten
enviar algo despus de que un cliente ha parado la conexin.

Administracin PHP

Configuracin: Directivas generales

include_path string
Especifica una lista de directorios en los que las funciones require(), include() y
fopen_with_path() buscan los archivos. El formato es similar a la variable de
entorno de sistema PATH: una lista de directorios separados por dos puntos en
UNIX o por punto y coma en Windows.

magic_quotes_gpc boolean
Fija el estado magic_quotes para operaciones GPC (Get/Post/Cookie). Si
magic_quotes vale on, todas las ' (comilla sencilla), " (comilla doble), \ (barra
invertida) y los NULL son automticamente marcados con una barra invertida.
Si adems magic_quotes_sybase vale on, la comilla sencilla es marcada
con otra comilla sencilla en lugar de la barra invertida.

magic_quotes_runtime boolean
Si se habilita magic_quotes_runtime, muchas de las funciones que devuelven
datos de algn tipo de fuente externa incluyendo bases de datos y archivos de
texto devolvern las comillas marcadas con una barra invertida. Si tambin
est activo magic_quotes_sybase, la comilla simple es marcada con una
comilla simple en lugar de la barra invertida.

10

Administracin PHP

Configuracin: Directivas generales

max_execution_time integer
Fija el tiempo mximo en segundos que se le permite usar a un script antes
de ser finalizado por el intrprete. Evita que scripts mal escritos puedan
bloquear el servidor.

memory_limit integer
Fija el tamao mximo de memoria en bytes que se permite reclamar a un
script. Evita que script mal escritos utilizen toda la memoria disponible de
un servidor.

short_open_tag boolean
Indica si se debe permitir el formato corto (<??>) de la etiqueta de apertura
de PHP. Si desea utilizar PHP en combinacin con XML, deber
desactivar esta opcin. Si est desactivada, deber utilizar el formato largo
de la etiqueta de apertura (<?php?>).

11

Administracin PHP

Configuracin: Directivas generales

upload_tmp_dir string
El directorio temporal utilizado para almacenar archivos cuando se envan al
servidor. Debe tener permiso de escritura para el usuario bajo el que corra
PHP.

user_dir string
El nombre base del directorio utilizado bajo el directorio inicial de un usuario
para los archivos PHP. Por ejemplo: paginas_html.

warn_plus_overloading boolean
Si est activada, esta opcin hace que PHP muestre un aviso cuando el
operador suma (+) se utiliza en cadenas. Permite encontrar fcilmente
scripts que necesitan ser reescritos utilizando el concatenador de cadenas
(.).

12

Administracin PHP

Configuracin: Directivas de correo

SMTP string
Nombre DNS o direccin IP del servidor de SMTP que PHP bajo Windows
deber usar para enviar correos con la funcin mail().

sendmail_from string
La direccin del remitente ("De:") para los correos enviados desde PHP bajo
Windows.

sendmail_path string
Localizacin del programa sendmail. Generalmente /usr/sbin/sendmail
o /usr/lib/sendmail.
Los sistemas que no usan sendmail debern fijar esta directiva al nombre del
programa alternativo que ofrezca su sistema de correo. Por ejemplo, los
usuarios de Qmail pueden fijarlo a /var/qmail/bin/sendmail

13

Administracin PHP

Configuracin: Directivas de modo seguro

safe_mode boolean
Para activar el modo seguro de PHP (muy poco recomendable).

safe_mode_exec_dir string
Si PHP se utiliza en modo seguro, la funcin system() y el resto de funciones
que ejecutan programas del sistema se niegan a ejecutar programas que
no estn en este directorio.

14

Administracin PHP

Configuracin: Directivas de MySQL

mysql.allow_persistent boolean

Permitir o no conexiones MySQL persistentes.


mysql.default_host string

El servidor por defecto para utilizar cuando se conecte al servidor de bases


de datos si no se especifica otro distinto.
mysql.default_user string

El nombre de usuario por defecto para utilizar cuando se conecta al servidor


de base de datos si no se especifica otro.
mysql.default_password string

La clave por defecto para utilizar cuando se conecta al servidor de base de


datos si no se especifica otro.
mysql.max_persistent integer

El nmero mximo de conexiones persistentes de MySQL por proceso.


mysql.max_links integer
El nmero mximo de conexiones de MySQL por proceso, incluyendo las
persistentes.

15

Administracin PHP

Configuracin: Directivas de PHP5

zend.ze1_compatibility_mode boolean

Habilita compatibilidad con Zend Engine 1 (PHP 4.x)


error_reporting string

E_STRICT: informacin en tiempo de ejecucin, habilita sugerencias para


cambiar el cdigo. (deshabilitar en produccin)
auto_globals_jit boolean

Cuando est habilitado, las variables SERVER y ENV se crean cuando son
usadas por primera vez (Just In Time) y no cuando el script se inicia. Si
estas variables no se usan en el script, se gana en rendimiento.
mail.force_extra_parameters string

Fuerza la adicin del parmetro especificado en el binario sendmail.


register_long_arrays boolean

Registrar las variables "deprecated" predefinidas $HTTP_*_VARS.


session.hash_function integer
Algoritmo hash para generar el session ID.
0 = MD5 (128 bits) / 1 = SHA-1 (160 bits).

16

Administracin PHP

Configuracin: Directivas de PHP5

mysqli.max_links
mysqli.default_port
mysqli.default_socket
mysqli.default_host
mysqli.default_user
mysqli.default_pw
mysqli.reconnect
Directivas para la libreria MySQL Improved (versin 4.1)

soap.wsdl_cache_enabled

boolean

Habilita o deshabilita el WSDL caching.

soap.wsdl_cache_dir string
Directorio dnde se almacenaran los archivos de cach de la extensin
SOAP.

soap.wsdl_cache_ttl int
Nmero de segundos que los archivos de cach sern usados antes que los
originales.

17

Administracin PHP

Configuracin desde Apache


Cuando se utiliza PHP como mdulo Apache, tambin puede cambiar
los ajustes de configuracin utilizando directivas en los archivos
de configuracin de Apache y en los .htaccess.
Hay unas pocas directivas de Apache que le permiten cambiar los
ajustes de configuracin de PHP:
php_value nombre valor
Fija el valor de la variable especificada.

php_flag nombre on|off


Fija una opcin de configuracin de tipo Boolean.

php_admin_value nombre valor


Fija el valor de la variable especificada. Los ajustes de
configuracin de tipo "Admin" slo se pueden fijar desde los
archivos principales de configuracin del Apache, y no desde
los .htaccess.

php_admin_flag nombre on|off


Fija una opcin de configuracin de tipo Boolean.

18

Administracin PHP

Configuracin: Directivas monitoraje

display_errors boolean
Determina si los errores se visualizan en pantalla como parte de la salida en
HTML o no.

log_errors boolean
Si los mensajes de error de los script deben ser registrados o no en el registro del
servidor.

track_errors boolean
Si est habilitada, el ltimo mensaje de error estar siempre presente en la
variable global $php_errormsg

19

Administracin PHP

Configuracin: Directivas monitoraje

error_log string
Nombre del fichero para registrar los errores de un script. Si se utiliza el valor
especial syslog, los errores se envan al registro de errores del sistema.
En UNIX se refiere a syslog(3) y en Windows al registro de eventos.

error_reporting integer
Fija el nivel de informe de errores. El parmetro es un entero que representa
un campo de bits. Sume los valores de los niveles de informe de error que
desea.
(continua)

20

Administracin PHP

Configuracin: Directivas monitoraje


La directiva error_reporting especifica el tipo de errores notificados por PHP.
Tipo de error

Descripcin

E_ALL

Todos los errores y avisos

E_ERROR

Errores fatales detectados en tiempo de ejecucin

E_WARNING

Advertencias (errores no fatales) detectados en tiempo de ejecucin.

E_PARSE

Errores de sintaxis detectados en tiempo de compilacin.

E_NOTICE

Avisos detectados en tiempo de ejecucin (pueden deberse a errores involuntarios o a errores intencionados,
por ejemplo, utilizar una variable no inicializada, pero utilizarla teniendo en cuenta que se inicializar
automticamente a una cadena vaca)

E_STRICT

Avisos detectados en tiempo de ejecucin, al activarlos PHP sugiere cambios en el cdigo para que una
mejor interoperabilidad y compatibilidad en el futuro.

E_CORE_ERROR

Errores fatales detectados durante el arranque inicial de PHP.

E_CORE_WARNING

Advertencias (errores no fatales) detectados durante el arranque inicial de PHP.

E_COMPILE_ERROR

Erores fatales detectados en tiempo de compilacin.

E_COMPILE_WARNING

Advertencias (errores no fatales) detectados en tiempo de compilacin.

E_USER_ERROR

Mensajes de error generados por el usuario.

E_USER_WARNING

Advertencias generadas por el usuario.

E_USER_NOTICE

Avisos generados por el usuario.

Para detectar el mayor nmero posible de errores durante el desarrollo de las pginas PHP es conveniente que la directiva error_reporting tome el
valor E_ALL, aunque muchos servidores no suelen mostrar los avisos, ya que pueden deberse a errores intencionados.
error_reporting = E_ALL

Se muestran todos los errores.

error_reporting = E_ALL & ~E_NOTICE

Se muestran todos los errores, menos los avisos.

21

Administracin PHP

Configuracin: Verificar
Para obtener los detalles de la configuracin crearemos el siguiente
script:
<?php
phpinfo();
?>

...
22

Administracin PHP

Archivo php.ini ejemplo

23

Administracin PHP

Monitoraje: Tratamiento de errores


Error handling
Mtodo por el cual el programador puede sobrescribir la funcin que
interceptar y tratar los avisos y errores de programacin.
Esta tcnica permite:
Crear un registro de errores contra una base de datos.
Enviar un correo al administrador en caso de fallo grave.
...

24

Administracin PHP

Monitoraje: Tratamiento de errores


<?php
// usaremos nuestra propia funcion para el tratamiento de errores
error_reporting(0);
// funcin definida por el usuario de tratamiento de errores
function userErrorHandler ($errno, $errmsg, $filename, $linenum, $vars) {
// timestamp para la entrada del error
$dt = date("Y-m-d H:i:s (T)");
// define un array asociativo de string de errores
// en realidad solo se tendran que considerar
// las entradas de 2,8,256,512 y 1024
$errortype = array (
1
=> "Error",
2
=> "Warning",
4
=> "Parsing Error",
8
=> "Notice",
16 => "Core Error",
32 => "Core Warning",
64 => "Compile Error",
128 => "Compile Warning",
256 => "User Error",
512 => "User Warning",
1024=> "User Notice"
2048=> "Strict" // PHP 5
);

25

Administracin PHP

Monitoraje: Tratamiento de errores


// se prepara el error
$err = "<errorentry>\n";
$err .= "\t<datetime>".$dt."</datetime>\n";
$err .= "\t<errornum>".$errno."</errornum>\n";
$err .= "\t<errortype>".$errortype[$errno]."</errortype>\n";
$err .= "\t<errormsg>".$errmsg."</errormsg>\n";
$err .= "\t<scriptname>".$filename."</scriptname>\n";
$err .= "\t<scriptlinenum>".$linenum."</scriptlinenum>\n";
$err .= "</errorentry>\n\n";
// para testear
// echo $err;
// guardar en el log de errores
error_log($err, 3, "/usr/local/php4/error.log");
// si se trata de un error crtico se enva un correo al usuario
if ($errno == E_USER_ERROR)
mail("phpdev@example.com","Critical User Error",$err);
}

26

Administracin PHP

Monitoraje: Tratamiento de errores


function distance ($vect1, $vect2) {
if (!is_array($vect1) || !is_array($vect2)) {
trigger_error("Incorrect parameters, arrays expected", E_USER_ERROR);
return NULL;
}
if (count($vect1) != count($vect2)) {
trigger_error("Vectors need to be of the same size", E_USER_ERROR);
return NULL;
}
for ($i=0; $i<count($vect1); $i++) {
$c1 = $vect1[$i]; $c2 = $vect2[$i];
$d = 0.0;
if (!is_numeric($c1)) {
trigger_error("Coordinate $i in vector 1 is not a number, using zero",
E_USER_WARNING);
$c1 = 0.0;
}
if (!is_numeric($c2)) {
trigger_error("Coordinate $i in vector 2 is not a number, using zero",
E_USER_WARNING);
$c2 = 0.0;
}
$d += $c2*$c2 - $c1*$c1;
}
return sqrt($d);
}

27

Administracin PHP

Monitoraje: Tratamiento de errores


$old_error_handler = set_error_handler("userErrorHandler");
// constante no definida, genera un aviso
$t = I_AM_NOT_DEFINED;
//
$a
$b
$c

define algun vector


= array(2,3,"foo");
= array(5.5, 4.3, -1.6);
= array (1,-3);

// genera un error de usuario


$t1 = distance($c,$b)."\n";
// genera otro error de usuario
$t2 = distance($b,"i am not an array")."\n";
// genera un aviso
$t3 = distance($a,$b)."\n";
?>

28

Administracin PHP

Seguridad

Introduccin

Variables globales

Nombres de ficheros

Subida de ficheros

Bibliotecas

Formularios

29

Administracin PHP

Seguridad: Introduccin

Primera recomendacin:

Disponer siempre de versiones actualizadas de Apache y PHP

Aspectos de PHP que pueden dar lugar a vulnerabilidades:

Variables globales

Nombres de ficheros

Subida de ficheros

Bibliotecas

Datos enviados desde formularios

30

Administracin PHP

Seguridad: Variables globales

Cuando register_globals est activado en el fichero php.ini,


PHP crea automticamente variables globales a partir de los
datos de los formularios y de las cookies.
Esto puede dar lugar a problemas como en el ejemplo
siguiente:

<?PHP

if (comprueba_privilegios())

$superuser = true;

...

?>

31

Administracin PHP

Seguridad: Variables globales

Una llamada a este script de la forma:


pagina.php?superuser=1
permitira

obtener privilegios de superusuario

Para resolver este problema existen tres soluciones:


Deshabilitar register_globals en el fichero php.ini
Inicializar las variables
Establecer el orden de las variables en PHP

32

Administracin PHP

Seguridad: Variables globales

Deshabilitar register_globals en el fichero php.ini


La directiva register_globals del fichero php.ini establece si se
admite o no la creacin automtica de variables globales.
A partir de PHP 4.2.0 el valor por defecto de esta directiva es off,
que es el valor recomendable.

33

Administracin PHP

Seguridad: Variables globales

Inicializar las variables:


El problema anterior se soluciona dando un valor inicial a la
variable $superuser:
<?PHP
$superuser = false;
if (comprueba_privilegios())
$superuser = true;
...
?>

34

Administracin PHP

Seguridad: Variables globales

Inicializar las variables:


Es recomendable inicializar todas las variables antes de usarlas. Se
puede usar la directiva error_reporting=E_ALL en php.ini para que
muestre un aviso cuando se use una variable que no haya sido
previamente inicializada.
En un entorno de produccin debe evitarse la aparicin de mensajes
de aviso o error. Para ello se utilizan las siguientes directivas en
php.ini:
display_errors = off
log_errors = on
error_log = /var/log/php_errors.log

Los errores irn al fichero especificado en lugar de mostrarse en la


pantalla.
35

Administracin PHP

Seguridad: Variables globales

Establecer el orden de las variables en PHP:


PHP crea automticamente variables globales a partir del entorno
(E), las cookies (C), la informacin del servidor (S) y los
parmetros GET (G) y POST (P)
La directiva variables_order controla el orden de estas variables. El
valor por defecto es EGPCS
Permitir la creacin de variables globales desde parmetros GET y
POST y desde cookies es potencialmente peligroso. Un posible
valor para variables_order que evita esto es ES
En tal caso para acceder a los parmetros de los formularios y a las
cookies se deben utilizar los arrays globales $_REQUEST,
$_GET, $_POST y $_COOKIES
36

Administracin PHP

Seguridad: Variables globales

Establecer el orden de las variables en PHP


Si se modifican las directivas register_globals y/o variables_order es
preciso revisar los scripts existentes para adaptarlos a las nuevas
circunstancias.
Una forma puede ser la siguiente:

$edad = $_REQUEST[edad];
...

37

Administracin PHP

Seguridad: Nombres de ficheros

Es relativamente fcil construir un nombre de fichero que se


refiera a algo distinto a lo que se pretende
Sea el siguiente cdigo:
include (/usr/local/lib/bienvenida/$username);

Este cdigo pretende mostrar un mensaje de bienvenida


personalizado para el usuario. Aparentemente no es
peligroso, pero qu ocurrira si el usuario introduce como
nombre la cadena ../../../../etc/passwd?

Se mostrara el fichero de passwords del sistema.

38

Administracin PHP

Seguridad: Nombres de ficheros

Adems hay que tener en cuenta que las funciones de manejo de


ficheros como include() o require() admiten nombres de ficheros
remotos, lo que podra provocar la ejecucin de cdigo maligno
cargado de otro servidor. Sea, por ejemplo, el cdigo

include ($libdir . /conecta.php);

Si un atacante modifica el valor de la variable $libdir a, pongamos


por caso, http://atacante/, y coloca en la raz del mismo un
fichero de nombre conecta.php, su cdigo sera ejecutado
Se puede desactivar la funcionalidad de acceso a ficheros remotos
con la siguiente directiva en php.ini:

allow_url_fopen = off

39

Administracin PHP

Seguridad: Nombres de ficheros

Para chequear nombres de ficheros se utilizan las funciones


realpath() y basename(). La primera convierte direcciones
relativas en absolutas y la segunda toma una ruta y devuelve la
parte correspondiente al nombre del fichero. Ejemplo:

$file = $_POST[username];

$file2 = basename (realpath($file));

if ($file2 != $file)

die ($file no es un username vlido);

include (/usr/local/lib/bienvenida/$file);

40

Administracin PHP

Seguridad: Nombres de ficheros

Otra defensa contra los nombres de ficheros incorrectos es la


directiva de php.ini open_basedir:

open_basedir = /alguna/ruta

PHP limitar las operaciones sobre ficheros al directorio


especificado y sus subdirectorios:

include (/alguna/ruta/lib.inc);

include (/otra/ruta/lib.inc);

// permitido

// da error

41

Administracin PHP

Seguridad: Subida de ficheros

La subida de ficheros permite a un usuario enviar cualquier


fichero al servidor, lo cual encierra un gran peligro ya que un
atacante puede subir un cdigo maligno y luego ejecutarlo,
causando ms dao que cuando se incluye el cdigo desde un
servidor remoto

Como recomendacin general, debe evitarse utilizar el nombre


enviado por el navegador (podra ser, por ejemplo, /etc/passwd).
Es conveniente generar un nombre nico para el fichero subido

42

Administracin PHP

Seguridad: Subida de ficheros

Otro peligro es el tamao de los ficheros. Aunque se limite el


tamao mximo en el formulario, los ficheros se reciben
automticamente y luego se comprueba su tamao.

Es posible que un usuario intente provocar un ataque de


denegacin de servicio enviando varios ficheros de gran
tamao a la vez y llenando el sistema de ficheros utilizado
por PHP para almacenarlos.

Para evitar esto se puede utilizar la directiva post_max_size de


php.ini. El valor por defecto suele ser ms elevado de lo
necesario.

43

Administracin PHP

Seguridad: Bibliotecas

Es conveniente almacenar los ficheros de biblioteca fuera de


la raz de la web para evitar que puedan ser accedidos por
su URL.
En tal caso debe hacerse saber a PHP la ubicacin de los
ficheros indicando la ruta completa en los include() y
require() o bien mediante la directiva include_path en
php.ini

include_path = .:/usr/local/php:/usr/local/lib/myapp

Esto es particularmente importante cuando en el cdigo de la


biblioteca aparecen passwords, como es el caso de las
funciones de conexin con bases de datos

44

Administracin PHP

Seguridad: Formularios

Es recomendable validar todos los datos provenientes de


formularios para asegurarse de que los valores recibidos son
los esperados.
En general, cualquier informacin proveniente del exterior
debe contemplarse como posiblemente contaminada y debe
ser verificada antes de ser utilizada.
Sea el siguiente ejemplo:

print (Nombre: . $nombre);

print (Comentario: . $comentario);

45

Administracin PHP

Seguridad: Formularios

Si el autor del comentario introdujo algn cdigo HTML en el


texto del mismo, el cdigo ser interpretado y sus efectos
podran ser graves
Para evitar esto se puede utilizar la funcin
htmlspecialchars(), que impide que se interpreten los
caracteres especiales de HTML (<, >, &)
El cdigo quedara de la siguiente manera:

print (Nombre: . $nombre);

print (Comentario: . htmlspecialchars($comentario));

46

Administracin PHP

Seguridad: Resumen

De todo lo anterior podemos concluir las dos recomendaciones


siguientes:

Configurar adecuadamente PHP a travs del fichero php.ini

Seguir unas buenas prcticas en la programacin.

Hay que tener en cuenta que cualquier cambio en la configuracin


de PHP afectar a los scripts de todos los usuarios y
posiblemente a algunas herramientas, lo cual debe ser tenido en
cuenta y estudiarse sus consecuencias antes de proceder a
realizarlos.

47

Administracin PHP

Consideraciones al programador
Safe mode
Sessiones
Variables globales
phpinfo()
Tiempo de ejecucin mximo
Mximo tamao de UPLOAD
Permisos de upload
Porqu no se deben guardar archivos en la BBDD?

48

Administracin PHP

Consideraciones al programador
Safe mode:
El Modo Seguro de PHP es un intento para resolver el problema de
la seguridad en un servidor compartido.
Tratar de resolver este problema a nivel de PHP es
arquitectnicamente incorrecto.
Ya que las alternativas en un servidor web y a niveles de sistemas
operativos no son tan realistas puede ser una alternativa por
ahora.
Restricciones:
Funciones restringidas (chdir, exec, system, passthru...)
PHP verifica si el dueo del script actual coincide con el dueo del
fichero a ser operado por una funcin de fichero.
Tiempo de ejecucin limitado estrictamente.
Consultar manual: http://es.php.net/features.safe-mode

En resumen, no es demasiado recomendable utilizarlo.


49

Administracin PHP

Consideraciones al programador
Sesiones:
Permiten almacenar datos al programador entre peticin y peticin.
Dnde se almacenan?
Por defecto PHP est configurado para crear archivos temporales
en /tmp y uno por sessin.
En el caso de un servidor con gran carga y peticiones concurrentes:
Miles de pequeos archivos de sessin en un slo
directorio.
Agotar el espacio en disco.

Se pueden configurar el almacenamiento de las sesiones contra


una BBDD (solo a nivel de programacin).

50

Administracin PHP

Consideraciones al programador
Variables globales:
Por razones de seguridad conviene desactivarlas.
Muchos programadores las usan de forma indiscriminada.

phpinfo():
Conviene que el programador conozca el uso de la funcin phpinfo()
para conocer la configuracin exacta del servidor.

Tiempo de ejecucin mximo:


El programador debe tener en cuenta el tiempo mximo de ejecucin
configurado. Se puede alterar desde los scripts con la funcin
set_time_limit().
Adems se debe saber que Apache tambin dispone de la directiva
timeout.

51

Administracin PHP

Consideraciones al programador
Mximo tamao de UPLOAD:
Se configura con las directivas de PHP post_max_size y
upload_max_filesize.

Permisos de upload:
Se podr escribir en el directorio deseado?

Porqu no se deben guardar archivos en la BBDD?


En la mayora de bbdd las tablas se almacenan como archivos.
El sistema de ficheros puede no soportar archivos de ms de 2Gb.
El rendimiento de la BBDD se ve perjudicado.

52

Administracin PHP

Recursos
Links recomendados:
Documentacin oficial:
http://www.php.net

Bibliografia recomendada:

Sams Teach Yourself PHP, MySQL and Apache All in One


By Julie C. Meloni
Publisher: Sams Publishing
Pub Date: December 18, 2003
ISBN: 0-672-32620-5
Pages: 624
PHP5 and MySQL Bible
By Tim Converse, Joyce Park
Publisher: Wiley Publishing, Inc.
Pub Date: 2004
ISBN: 0-7645-5746-7
Pages: 1083
PHP Cookbook
By David Sklar, Adam Trachtenberg
Publisher: O'Reilly
Pub Date: November 2002
ISBN: 1-56592-681-1
Pages: 632

53

You might also like