Documentos de Académico
Documentos de Profesional
Documentos de Cultura
GUIA 5 PHP
Existen varias formas de enviar las variables de una página a otra de manera a que la página
destino reconozca el valor asignado por el script de origen:
Para pasar las variables de una página a otra lo podemos hacer introduciendo dicha variable
dentro del enlace hipertexto de la página destino. La sintaxis sería la siguiente:
Mediante un enlace
Se puede observar que estas variables no poseen el símbolo $ delante. Esto es debido a que
en realidad este modo de pasar variables no es específico de PHP sino que es utilizado por
otros lenguajes.
Ejemplo
header("Location: index.php?calculo=$c");
2. SEGURIDAD EN PHP
Recomendaciones de Seguridad
Tener actualizado con las últimas versiones Navegador, Lenguaje (PHP) y Servidor
(Apache).
Una aplicación está sustentada en una serie de componentes software. Todos los días se
descubren vulnerabilidades que afectan a esos componentes y se publican actualizaciones
para parchearlas. Si no aplicamos esas actualizaciones tenemos componentes con
vulnerabilidades conocidas y publicadas.
Normalmente, alguna zona de nuestra web necesite acceso mediante usuario y contraseña.
Para que el usuario no tenga que introducirlas repetidamente podemos guardarla mediante
cookies pero es una práctica muy insegura ya que si lo hiciéramos, esta información es
transmitida mediante la red en texto plano y podría ser leída por cualquier persona que realice
un sniffing de red o que lea las cookies guardadas en nuestro ordenador mediante un virus o
troyano.
Por ello lo mejor es hacer uso de las variables de sesión. Estas variables se guardan en el
servidor por lo que en cualquier caso, la información transmitida sólo es sensible la primera
vez que se envía y no las sucesivas veces (por tanto esto sería evitable haciendo uso del
protocolo HTTPS en vez de HTTP). Mas info: https://norfipc.com/internet/cuando-para-que-
usar-http-https-navegar-internet.php
Como ejemplo del usuario de variables de sesión, haremos uso de dos archivos. En el primero
creamos una variable de sesión:
session_start();
$_SESSION['clave'] = "clave_pruebas";
session_start();
echo $_SESSION['clave'];
Es muy común trabajar contra una base de datos (MySQL, PostgreSQL, Oracle, etc.) y estas
consultas dependen de parámetros llegados desde GET o POST, por lo que permitimos al
usuario de cada web que en cierta manera modifique las consultas SQL de nuestra web.
Esto podría provocar que un usuario que construya una consulta SQL malintencionada
pudiera obtener resultados indeseados, como poder hacer un login en una zona restringida
de nuestra web sin conocer ningún usuario / contraseña.
Si existe un usuario con ese nombre y usuario, es que la identificación es correcta y por tanto
debemos hacer el login. Pero sin embargo, si construyésemos el siguiente parámetro
Podemos observar que nos devuelve un valor válido para identificarse conociendo sólo el
nombre de usuario.
El principal problema de estos ataques es que si dejamos que el usuario del programa
introduzca libremente caracteres sin control ninguno (mediante formularios, por ejemplo)
puede llegar a aprovecharse de las comillas (simples y dobles con las que declaramos cadenas
de texto o strings).
En PHP tenemos varias formas de hacerlo, entre ellas para bases de datos MySQL tenemos
la función mysql_real_escape_string, que añadiremos en las variables que introducimos en la
consulta.
Para guardar las contraseñas de los usuarios en las bases de datos debemos guardarlas de
manera que no puedan ser visibles a simple vista ya que si alguna persona malintencionada
consiguiera acceder a la base de datos, además de conseguir el control de nuestra web,
además tendrá acceso a información sensible de los usuarios que nos visitan.
PHP históricamente ha usado el algoritmo MD5 o SHA1, tradicionales pero muy inseguros. En
el pasado Defcon fue posible romper más del 50% de los hash MD5 que se presentaron,
usando colisiones matemáticas y fuerza bruta. A partir de PHP5.5, el nuevo algoritmo de
cifrado de hashs para passwords será bcrypt, que usa un nuevo proceso matemático 10 veces
más fuerte.
http://www.cristalab.com/tutoriales/nuevo-hashing-de-passwords-y-manejo-de-claves-
seguras-en-php-5.5-c107820l/
Otras recomendaciones
Restringir subida de ficheros externos al servidor lo más estricto posible o solo por usuario
autorizados.
Manejo de sesiones Ver: http://php.net/manual/es/session.security.php
Opciones de configuración de seguridad en PHP. https://msdn.microsoft.com/es-
es/library/hh994605(v=ws.11).aspx
3. Sesiones en PHP
Vamos a empezar por definir un diagrama para realizar la autentificación de usuario en unas
páginas web, que nos servirá para programar luego las páginas ajustándose al diagrama.
Pagina 1: Contendrá los campos de formulario + el siguiente código php que ayudara a
identificar el estado de la sesión. Falta el código HTML para establecer controles de formulario.
El botón submit llamara a control.php.
<html><body>
<?
if (isset($_GET["error"])) // verifica si la variable “error” contiene un valor, viene de control.php
{
if ($_GET["errorusuario"]=="si")
{
echo "Datos incorrectos" ;
}
else
{
echo "Introduce tu clave de acceso ";
}
}
else
{
echo 'Esperando datos';
}
?>
</body></html>
<?
//vemos si el usuario y contraseña es váildo
if ($_POST["usuario"]=="miguel" && $_POST["contrasena"]=="qwerty")
{
//defino una sesion y guardo datos
session_start(); // crea una sesión
$_SESSION["autentificado"]= "SI"; // Se define variable con el valor de “SI”
header ("Location: aplicacion.php");
}else {
//si no existe le mando otra vez a la portada
header("Location: index.php?error=si"); // Envio variable a pagina inicial
}
?>
Este archivo, en nuestro caso llamado seguridad.php, se encargará de dotar seguridad a toda
la aplicación de acceso restringido. La técnica que vamos a utilizar es incluirlo al principio de
todas las páginas que queramos que permitan un acceso restringido.
<?
//Inicio la sesión
session_start();
Todos los archivos que queramos proteger, habrá que incluirles al principio la capa de
seguridad, representada por el archivo seguridad.php.
<?include ("seguridad.php");?>
<html>
<head>
<title>Aplicación segura</title>
</head>
<body>
<h1>Si estás aquí es que te has autentificado</h1>
<br>
Aplicación segura
<br>
<a href="salir.php">Salir</a>
</body>
</html>
El archivo en concreto lo único que hace es terminar la sesión asociada a su acceso. Podemos
ver el código a continuación.
<? session_start();
session_destroy();
header("Location: index.php");
?>
Ejercicios