Professional Documents
Culture Documents
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:
# 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
...
# pear list-all
# pear upgrade-all
Instalar un 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
Administracin PHP
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
Administracin PHP
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
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.
gpc_order string
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
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
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
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
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
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
mysql.allow_persistent boolean
15
Administracin PHP
zend.ze1_compatibility_mode 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
16
Administracin PHP
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
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
18
Administracin PHP
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
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
Descripcin
E_ALL
E_ERROR
E_WARNING
E_PARSE
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
E_CORE_WARNING
E_COMPILE_ERROR
E_COMPILE_WARNING
E_USER_ERROR
E_USER_WARNING
E_USER_NOTICE
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
21
Administracin PHP
Configuracin: Verificar
Para obtener los detalles de la configuracin crearemos el siguiente
script:
<?php
phpinfo();
?>
...
22
Administracin PHP
23
Administracin PHP
24
Administracin PHP
25
Administracin PHP
26
Administracin PHP
27
Administracin PHP
28
Administracin PHP
Seguridad
Introduccin
Variables globales
Nombres de ficheros
Subida de ficheros
Bibliotecas
Formularios
29
Administracin PHP
Seguridad: Introduccin
Primera recomendacin:
Variables globales
Nombres de ficheros
Subida de ficheros
Bibliotecas
30
Administracin PHP
<?PHP
if (comprueba_privilegios())
$superuser = true;
...
?>
31
Administracin PHP
32
Administracin PHP
33
Administracin PHP
34
Administracin PHP
Administracin PHP
Administracin PHP
$edad = $_REQUEST[edad];
...
37
Administracin PHP
38
Administracin PHP
allow_url_fopen = off
39
Administracin PHP
$file = $_POST[username];
if ($file2 != $file)
include (/usr/local/lib/bienvenida/$file);
40
Administracin PHP
open_basedir = /alguna/ruta
include (/alguna/ruta/lib.inc);
include (/otra/ruta/lib.inc);
// permitido
// da error
41
Administracin PHP
42
Administracin PHP
43
Administracin PHP
Seguridad: Bibliotecas
include_path = .:/usr/local/php:/usr/local/lib/myapp
44
Administracin PHP
Seguridad: Formularios
45
Administracin PHP
Seguridad: Formularios
46
Administracin PHP
Seguridad: Resumen
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
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.
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.
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?
52
Administracin PHP
Recursos
Links recomendados:
Documentacin oficial:
http://www.php.net
Bibliografia recomendada:
53