SlideShare una empresa de Scribd logo
1 de 21
Curso de PHP

Tema 6: Seguridad
Tema 6: Seguridad
1.
2.
3.
4.
5.
6.

Introducción
Variables globales
Nombres de ficheros
Subida de ficheros
Bibliotecas
Formularios
Introducción
Primera recomendación:
– 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
Variables globales
Cuando register_globals está activado en el fichero php.ini,
PHP crea automáticamente 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;
...
?>
Variables globales
Una llamada a este script de la forma
pagina.php?superuser=1

permitiría 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
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 creación automática de variables globales
– A partir de PHP 4.2.0 el valor por defecto de esta directiva es off,
que es el valor recomendable
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;
...
?>
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 se muestre un aviso cuando se use una variable que no haya
sido previamente inicializada
– En un entorno de producción debe evitarse la aparición 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 irán al fichero especificado en lugar de mostrarse en la
pantalla
Variables globales
Establecer el orden de las variables en PHP
– PHP crea automáticamente variables globales a partir del entorno
(E), las cookies (C), la información del servidor (S) y los parámetros
GET (G) y POST (P)
– La directiva variables_order controla el orden de estas variables. El
valor por defecto es “EGPCS”
– Permitir la creación de variables globales desde parámetros 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 parámetros de los formularios y a
las cookies se deben utilizar los arrays globales $_REQUEST,
$_GET, $_POST y $_COOKIES
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’];
...
Nombres de ficheros
Es relativamente fácil construir un nombre de fichero que se
refiera a algo distinto a lo que se pretende
Sea el siguiente código:
include (“/usr/local/lib/bienvenida/$username”);

Este código pretende mostrar un mensaje de bienvenida
personalizado para el usuario. Aparentemente no es peligroso,
pero ¿qué ocurriría si el usuario introduce como nombre la
cadena “../../../../etc/passwd”?
– Se mostraría el fichero de passwords del sistema
Nombres de ficheros
Además hay que tener en cuenta que las funciones de manejo
de ficheros como include() o require() admiten nombres de
ficheros remotos, lo que podría provocar la ejecución de
código maligno cargado de otro servidor. Sea, por ejemplo, el
código
include ($libdir . “/conecta.php”);

Si un atacante modifica el valor de la variable $libdir a,
pongamos por caso, “http://atacante/”, y coloca en la raíz del
mismo un fichero de nombre conecta.php, su código sería
ejecutado
Se puede desactivar la funcionalidad de acceso a ficheros
remotos con la siguiente directiva en php.ini:
allow_url_fopen = off
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 válido”);
include (“/usr/local/lib/bienvenida/$file”);
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”); // permitido
include (“/otra/ruta/lib.inc”);
// da error
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 código maligno y luego ejecutarlo,
causando más daño que cuando se incluye el código desde un
servidor remoto
Como recomendación general, debe evitarse utilizar el nombre
enviado por el navegador (podría ser, por ejemplo,
/etc/passwd). Es conveniente generar un nombre único para el
fichero subido
Subida de ficheros
Otro peligro es el tamaño de los ficheros. Aunque se limite el
tamaño máximo en el formulario, los ficheros se reciben
automáticamente y luego se comprueba su tamaño
Es posible que un usuario intente provocar un ataque de
denegación de servicio enviando varios ficheros de gran
tamaño 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 más elevado de lo
necesario
Subida de ficheros
Sea ahora el siguiente código:
if (file_exists($file))

// chequea la existencia en
// el sistema local

include (“$file”);

Esto evitaría la inclusión de un fichero remoto aunque el
atacante controlase la variable $file
Sin embargo, el atacante podría crear su propio formulario
usando el nombre file para el campo de tipo fichero y al enviarlo
colocaría en el servidor un fichero cuyo código sería ejecutado
Bibliotecas
Es conveniente almacenar los ficheros de biblioteca fuera de la
raíz de la web para evitar que puedan ser accedidos por su
URL
En tal caso debe hacerse saber a PHP la ubicación 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 código de la
biblioteca aparecen passwords, como es el caso de las
funciones de conexión con bases de datos
Formularios
Es recomendable validar todos los datos provenientes de
formularios para asegurarse de que los valores recibidos son
los esperados
En general, cualquier información 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);
Formularios
Si el autor del comentario introdujo algún código HTML en el
texto del mismo, el código será interpretado y sus efectos
podrían ser graves
Para evitar esto se puede utilizar la función
htmlspecialchars(), que impide que se interpreten los
caracteres especiales de HTML (<, >, &)
El código quedaría de la siguiente manera:
print (“Nombre: “ . $nombre);
print (“Comentario: “ . htmlspecialchars($comentario));
Resumen
De todo lo anterior podemos concluir las dos recomendaciones
siguientes:
– Configurar adecuadamente PHP a través del fichero php.ini
– Seguir unas buenas prácticas en la programación

Hay que tener en cuenta que cualquier cambio en la
configuración 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

Más contenido relacionado

La actualidad más candente

La actualidad más candente (12)

Manejo de archivos
Manejo de archivosManejo de archivos
Manejo de archivos
 
php
phpphp
php
 
Introducción a PHP5
Introducción a PHP5Introducción a PHP5
Introducción a PHP5
 
94 Php. Instalacion De Apache 2.0.58
94 Php. Instalacion De Apache 2.0.5894 Php. Instalacion De Apache 2.0.58
94 Php. Instalacion De Apache 2.0.58
 
Manual ldap
Manual ldapManual ldap
Manual ldap
 
Dos 2 p 2q
Dos   2 p 2qDos   2 p 2q
Dos 2 p 2q
 
56 Php. Transferencia De Ficheros
56 Php. Transferencia De Ficheros56 Php. Transferencia De Ficheros
56 Php. Transferencia De Ficheros
 
Ficheros Php
Ficheros PhpFicheros Php
Ficheros Php
 
Tuberías (PIPES). EN GNU-LINUX-CENTOS ::: http://leymebamba.com
Tuberías (PIPES).  EN GNU-LINUX-CENTOS  ::: http://leymebamba.comTuberías (PIPES).  EN GNU-LINUX-CENTOS  ::: http://leymebamba.com
Tuberías (PIPES). EN GNU-LINUX-CENTOS ::: http://leymebamba.com
 
Instalación de SGBD
Instalación de SGBDInstalación de SGBD
Instalación de SGBD
 
PROGRAMACION EN Php
PROGRAMACION EN Php PROGRAMACION EN Php
PROGRAMACION EN Php
 
Capitulo 9
Capitulo 9Capitulo 9
Capitulo 9
 

Destacado

Php y my sql. tecnología para el desarrollo de aplicaciones web escrito por á...
Php y my sql. tecnología para el desarrollo de aplicaciones web escrito por á...Php y my sql. tecnología para el desarrollo de aplicaciones web escrito por á...
Php y my sql. tecnología para el desarrollo de aplicaciones web escrito por á...ingenran
 
Sesion Nº 04 Introducción A Php Operadores E Instrucciones
Sesion Nº 04   Introducción A Php   Operadores E InstruccionesSesion Nº 04   Introducción A Php   Operadores E Instrucciones
Sesion Nº 04 Introducción A Php Operadores E InstruccionesEdgar A. Cruz Huaman
 
Iniciación PHP 5. Ejemplos
Iniciación PHP 5. EjemplosIniciación PHP 5. Ejemplos
Iniciación PHP 5. EjemplosRightster
 
Manual php5 basico
Manual php5 basicoManual php5 basico
Manual php5 basicoclaudicristy
 
Guía de buenas prácticas para desarrolladores web
Guía de buenas prácticas para desarrolladores webGuía de buenas prácticas para desarrolladores web
Guía de buenas prácticas para desarrolladores webJuan Victor Minaya León
 
Iniciación PHP 5. PHP y MySQL
Iniciación PHP 5. PHP y MySQLIniciación PHP 5. PHP y MySQL
Iniciación PHP 5. PHP y MySQLRightster
 
Ejercicios resueltos
Ejercicios resueltosEjercicios resueltos
Ejercicios resueltosfermodcor
 
Cuaderno de-ejercicios-y-practicas-php
Cuaderno de-ejercicios-y-practicas-phpCuaderno de-ejercicios-y-practicas-php
Cuaderno de-ejercicios-y-practicas-phplgcj1989
 
52 ejercicios-resueltos-en-pseudocodigo
52 ejercicios-resueltos-en-pseudocodigo52 ejercicios-resueltos-en-pseudocodigo
52 ejercicios-resueltos-en-pseudocodigoepetekaun
 
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
 
Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)Kiim Kerrigan
 

Destacado (17)

Php y my sql. tecnología para el desarrollo de aplicaciones web escrito por á...
Php y my sql. tecnología para el desarrollo de aplicaciones web escrito por á...Php y my sql. tecnología para el desarrollo de aplicaciones web escrito por á...
Php y my sql. tecnología para el desarrollo de aplicaciones web escrito por á...
 
Sesion Nº 04 Introducción A Php Operadores E Instrucciones
Sesion Nº 04   Introducción A Php   Operadores E InstruccionesSesion Nº 04   Introducción A Php   Operadores E Instrucciones
Sesion Nº 04 Introducción A Php Operadores E Instrucciones
 
Includes y $GET
Includes y $GETIncludes y $GET
Includes y $GET
 
Php - Operadores básicos
Php - Operadores básicosPhp - Operadores básicos
Php - Operadores básicos
 
Introducción a PHP
Introducción a PHPIntroducción a PHP
Introducción a PHP
 
Iniciación PHP 5. Ejemplos
Iniciación PHP 5. EjemplosIniciación PHP 5. Ejemplos
Iniciación PHP 5. Ejemplos
 
Manual php5 basico
Manual php5 basicoManual php5 basico
Manual php5 basico
 
Estructura Básica de PHP
Estructura Básica de PHPEstructura Básica de PHP
Estructura Básica de PHP
 
Guía de buenas prácticas para desarrolladores web
Guía de buenas prácticas para desarrolladores webGuía de buenas prácticas para desarrolladores web
Guía de buenas prácticas para desarrolladores web
 
Iniciación PHP 5. PHP y MySQL
Iniciación PHP 5. PHP y MySQLIniciación PHP 5. PHP y MySQL
Iniciación PHP 5. PHP y MySQL
 
Ejercicios resueltos
Ejercicios resueltosEjercicios resueltos
Ejercicios resueltos
 
Cuaderno de-ejercicios-y-practicas-php
Cuaderno de-ejercicios-y-practicas-phpCuaderno de-ejercicios-y-practicas-php
Cuaderno de-ejercicios-y-practicas-php
 
52 ejercicios-resueltos-en-pseudocodigo
52 ejercicios-resueltos-en-pseudocodigo52 ejercicios-resueltos-en-pseudocodigo
52 ejercicios-resueltos-en-pseudocodigo
 
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
 
Ciclovida
CiclovidaCiclovida
Ciclovida
 
Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)Ejemplos de algoritmos en C básicos (aprendiendo a programar)
Ejemplos de algoritmos en C básicos (aprendiendo a programar)
 
Manual+php+básico
Manual+php+básicoManual+php+básico
Manual+php+básico
 

Similar a mejorando con php

633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completoMETROPOLITANO
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completoErnesto Gamboa
 
633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completoUbeimar Navarro Herrera
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completoIgnacio Reyes
 
633f9e tutorial de php y my sql completo (1)
633f9e tutorial de php y my sql completo (1)633f9e tutorial de php y my sql completo (1)
633f9e tutorial de php y my sql completo (1)Eduardo Monroy Husillos
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completoAlberto Martinez
 
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfPHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfRaaulroodriguez
 
Manejo de datos blob con php y my sql
Manejo de datos blob con php y my sqlManejo de datos blob con php y my sql
Manejo de datos blob con php y my sqltavo_rojas22
 
Apache: instalación y configuración en Ubuntu Server y Windows Server
Apache: instalación y configuración en Ubuntu Server y Windows ServerApache: instalación y configuración en Ubuntu Server y Windows Server
Apache: instalación y configuración en Ubuntu Server y Windows ServerNombre Apellidos
 
69 Php. Proteccion De Directorios
69 Php. Proteccion De Directorios69 Php. Proteccion De Directorios
69 Php. Proteccion De DirectoriosJosé M. Padilla
 
Tutorial php basico
Tutorial php basicoTutorial php basico
Tutorial php basicoYo ♥ Tacna
 
Framework kahana
Framework kahanaFramework kahana
Framework kahanaH31D1
 
Tutorial de cakePHP itst
Tutorial de cakePHP itstTutorial de cakePHP itst
Tutorial de cakePHP itstomicx
 

Similar a mejorando con php (20)

633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo
 
Tutorial mysqlphp
Tutorial mysqlphpTutorial mysqlphp
Tutorial mysqlphp
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 
633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo633f9e tutorial de php y my sql completo
633f9e tutorial de php y my sql completo
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 
633f9e tutorial de php y my sql completo (1)
633f9e tutorial de php y my sql completo (1)633f9e tutorial de php y my sql completo (1)
633f9e tutorial de php y my sql completo (1)
 
Tutorial de php y my sql completo
Tutorial de php y my sql completoTutorial de php y my sql completo
Tutorial de php y my sql completo
 
Php andmysql (1)
Php andmysql (1)Php andmysql (1)
Php andmysql (1)
 
Introducción a Kohana Framework
Introducción a Kohana FrameworkIntroducción a Kohana Framework
Introducción a Kohana Framework
 
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdfPHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf PHP.pdf
 
Manejo de datos blob con php y my sql
Manejo de datos blob con php y my sqlManejo de datos blob con php y my sql
Manejo de datos blob con php y my sql
 
Apache: instalación y configuración en Ubuntu Server y Windows Server
Apache: instalación y configuración en Ubuntu Server y Windows ServerApache: instalación y configuración en Ubuntu Server y Windows Server
Apache: instalación y configuración en Ubuntu Server y Windows Server
 
Pdf
PdfPdf
Pdf
 
33 php
33 php33 php
33 php
 
Php andmysql
Php andmysqlPhp andmysql
Php andmysql
 
Unidad 3 ficheros
Unidad 3 ficherosUnidad 3 ficheros
Unidad 3 ficheros
 
69 Php. Proteccion De Directorios
69 Php. Proteccion De Directorios69 Php. Proteccion De Directorios
69 Php. Proteccion De Directorios
 
Tutorial php basico
Tutorial php basicoTutorial php basico
Tutorial php basico
 
Framework kahana
Framework kahanaFramework kahana
Framework kahana
 
Tutorial de cakePHP itst
Tutorial de cakePHP itstTutorial de cakePHP itst
Tutorial de cakePHP itst
 

Último

TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADOTIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADOPsicoterapia Holística
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxpvtablets2023
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024IES Vicent Andres Estelles
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOluismii249
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfUPTAIDELTACHIRA
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primariaWilian24
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICAÁngel Encinas
 
Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.JonathanCovena1
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...jlorentemartos
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesMarisolMartinez707897
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxNadiaMartnez11
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024IES Vicent Andres Estelles
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxlclcarmen
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxFernando Solis
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfpatriciaines1993
 
activ4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdfactiv4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdfRosabel UA
 
Posición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptxPosición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptxBeatrizQuijano2
 

Último (20)

TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADOTIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
TIENDAS MASS MINIMARKET ESTUDIO DE MERCADO
 
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptxRESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
RESULTADOS DE LA EVALUACIÓN DIAGNÓSTICA 2024 - ACTUALIZADA.pptx
 
Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024Tema 19. Inmunología y el sistema inmunitario 2024
Tema 19. Inmunología y el sistema inmunitario 2024
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdfNUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
NUEVAS DIAPOSITIVAS POSGRADO Gestion Publica.pdf
 
6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria6°_GRADO_-_MAYO_06 para sexto grado de primaria
6°_GRADO_-_MAYO_06 para sexto grado de primaria
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.Análisis de los Factores Externos de la Organización.
Análisis de los Factores Externos de la Organización.
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
 
Los avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtualesLos avatares para el juego dramático en entornos virtuales
Los avatares para el juego dramático en entornos virtuales
 
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docxTALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
TALLER DE DEMOCRACIA Y GOBIERNO ESCOLAR-COMPETENCIAS N°3.docx
 
Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024Tema 17. Biología de los microorganismos 2024
Tema 17. Biología de los microorganismos 2024
 
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptxLA LITERATURA DEL BARROCO 2023-2024pptx.pptx
LA LITERATURA DEL BARROCO 2023-2024pptx.pptx
 
Concepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptxConcepto y definición de tipos de Datos Abstractos en c++.pptx
Concepto y definición de tipos de Datos Abstractos en c++.pptx
 
Proyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdfProyecto de aprendizaje dia de la madre MINT.pdf
Proyecto de aprendizaje dia de la madre MINT.pdf
 
Usos y desusos de la inteligencia artificial en revistas científicas
Usos y desusos de la inteligencia artificial en revistas científicasUsos y desusos de la inteligencia artificial en revistas científicas
Usos y desusos de la inteligencia artificial en revistas científicas
 
activ4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdfactiv4-bloque4 transversal doctorado.pdf
activ4-bloque4 transversal doctorado.pdf
 
Posición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptxPosición astronómica y geográfica de Europa.pptx
Posición astronómica y geográfica de Europa.pptx
 

mejorando con php

  • 1. Curso de PHP Tema 6: Seguridad
  • 2. Tema 6: Seguridad 1. 2. 3. 4. 5. 6. Introducción Variables globales Nombres de ficheros Subida de ficheros Bibliotecas Formularios
  • 3. Introducción Primera recomendación: – 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
  • 4. Variables globales Cuando register_globals está activado en el fichero php.ini, PHP crea automáticamente 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; ... ?>
  • 5. Variables globales Una llamada a este script de la forma pagina.php?superuser=1 permitiría 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
  • 6. 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 creación automática de variables globales – A partir de PHP 4.2.0 el valor por defecto de esta directiva es off, que es el valor recomendable
  • 7. 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; ... ?>
  • 8. 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 se muestre un aviso cuando se use una variable que no haya sido previamente inicializada – En un entorno de producción debe evitarse la aparición 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 irán al fichero especificado en lugar de mostrarse en la pantalla
  • 9. Variables globales Establecer el orden de las variables en PHP – PHP crea automáticamente variables globales a partir del entorno (E), las cookies (C), la información del servidor (S) y los parámetros GET (G) y POST (P) – La directiva variables_order controla el orden de estas variables. El valor por defecto es “EGPCS” – Permitir la creación de variables globales desde parámetros 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 parámetros de los formularios y a las cookies se deben utilizar los arrays globales $_REQUEST, $_GET, $_POST y $_COOKIES
  • 10. 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’]; ...
  • 11. Nombres de ficheros Es relativamente fácil construir un nombre de fichero que se refiera a algo distinto a lo que se pretende Sea el siguiente código: include (“/usr/local/lib/bienvenida/$username”); Este código pretende mostrar un mensaje de bienvenida personalizado para el usuario. Aparentemente no es peligroso, pero ¿qué ocurriría si el usuario introduce como nombre la cadena “../../../../etc/passwd”? – Se mostraría el fichero de passwords del sistema
  • 12. Nombres de ficheros Además hay que tener en cuenta que las funciones de manejo de ficheros como include() o require() admiten nombres de ficheros remotos, lo que podría provocar la ejecución de código maligno cargado de otro servidor. Sea, por ejemplo, el código include ($libdir . “/conecta.php”); Si un atacante modifica el valor de la variable $libdir a, pongamos por caso, “http://atacante/”, y coloca en la raíz del mismo un fichero de nombre conecta.php, su código sería ejecutado Se puede desactivar la funcionalidad de acceso a ficheros remotos con la siguiente directiva en php.ini: allow_url_fopen = off
  • 13. 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 válido”); include (“/usr/local/lib/bienvenida/$file”);
  • 14. 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”); // permitido include (“/otra/ruta/lib.inc”); // da error
  • 15. 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 código maligno y luego ejecutarlo, causando más daño que cuando se incluye el código desde un servidor remoto Como recomendación general, debe evitarse utilizar el nombre enviado por el navegador (podría ser, por ejemplo, /etc/passwd). Es conveniente generar un nombre único para el fichero subido
  • 16. Subida de ficheros Otro peligro es el tamaño de los ficheros. Aunque se limite el tamaño máximo en el formulario, los ficheros se reciben automáticamente y luego se comprueba su tamaño Es posible que un usuario intente provocar un ataque de denegación de servicio enviando varios ficheros de gran tamaño 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 más elevado de lo necesario
  • 17. Subida de ficheros Sea ahora el siguiente código: if (file_exists($file)) // chequea la existencia en // el sistema local include (“$file”); Esto evitaría la inclusión de un fichero remoto aunque el atacante controlase la variable $file Sin embargo, el atacante podría crear su propio formulario usando el nombre file para el campo de tipo fichero y al enviarlo colocaría en el servidor un fichero cuyo código sería ejecutado
  • 18. Bibliotecas Es conveniente almacenar los ficheros de biblioteca fuera de la raíz de la web para evitar que puedan ser accedidos por su URL En tal caso debe hacerse saber a PHP la ubicación 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 código de la biblioteca aparecen passwords, como es el caso de las funciones de conexión con bases de datos
  • 19. Formularios Es recomendable validar todos los datos provenientes de formularios para asegurarse de que los valores recibidos son los esperados En general, cualquier información 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);
  • 20. Formularios Si el autor del comentario introdujo algún código HTML en el texto del mismo, el código será interpretado y sus efectos podrían ser graves Para evitar esto se puede utilizar la función htmlspecialchars(), que impide que se interpreten los caracteres especiales de HTML (<, >, &) El código quedaría de la siguiente manera: print (“Nombre: “ . $nombre); print (“Comentario: “ . htmlspecialchars($comentario));
  • 21. Resumen De todo lo anterior podemos concluir las dos recomendaciones siguientes: – Configurar adecuadamente PHP a través del fichero php.ini – Seguir unas buenas prácticas en la programación Hay que tener en cuenta que cualquier cambio en la configuración 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