Está en la página 1de 7

DESARROLLO CON PHP (PASO DE VARIABLES Y SEGURIDAD)

GUIA 5 PHP

1. Paso de variables entre formularios

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:

Pasar variables por URL

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

<a href="destino.php?variable1=valor1&variable2=valor2&...">Mi enlace</a>

Redireccionando a otra página

header("Location: index.php?error=$si"); // donde error es la variable a pasar

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

Realizar la suma de dos valores y mostrar el resultado el resultado en la misma pagina.

Al oprimir “Enviar” enviamos los datos al formulario php en


el cual capturamos los datos con $_REQUEST y realizamos
la suma respectiva.

Por ultimo redireccionamos a la página principal


enviándoles la variable calculada.($c es la suma del valor 1 y
valor 2)

header("Location: index.php?calculo=$c");

puede pasar mas de una variable separando con &

En nuestra página principal debemos llamar la variable calculada.


Para esto debemos insertar código php dentro de html. En la propiedad value de la caja
donde se va a mostrar el resultado se coloca.

<input type="text" name="resultado" value=”


<?php

GUIA PHP (PASO DE VARIABLES Y SEGURIDAD) REALIZADA POR DFMD 1


DESARROLLO CON PHP (PASO DE VARIABLES Y SEGURIDAD)

If (isset($_GET[‘calculo’])) // pregunta si la variable tiene un dato asignado


{
Echo ($_GET[‘calculo’]);
} />

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.

 Uso de variables de sesión y no de cookies

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

GUIA PHP (PASO DE VARIABLES Y SEGURIDAD) REALIZADA POR DFMD 2


DESARROLLO CON PHP (PASO DE VARIABLES Y SEGURIDAD)

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";

y en el segundo mostramos el valor en pantalla.

session_start();
echo $_SESSION['clave'];

 Protección contra la inyección de código SQL

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.

Supongamos la siguiente situación: tenemos un nombre de usuario pruebas y una contraseña


clave_pruebas guardados en base de datos. Para realizar la identificador obtenemos los
parámetros por POST mediante las variables $_POST['usuario'] y $_POST['clave']. Tras ello
realizamos la siguiente consulta SQL:

mysql_query('select id from usuariosWeb where usuario = '".$_POST['usuario']."' and password =


'".$_POST['clave']."'');

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

$_POST['clave'] ="m' or 1='1"

Podemos observar que nos devuelve un valor válido para identificarse conociendo sólo el
nombre de usuario.

Como evitar estos ataques

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.

GUIA PHP (PASO DE VARIABLES Y SEGURIDAD) REALIZADA POR DFMD 3


DESARROLLO CON PHP (PASO DE VARIABLES Y SEGURIDAD)

$respuesta=mysql_query("SELECT * FROM `Usuarios` WHERE


`user`='".mysql_real_escape_string($name)."' AND `pass`='".mysql_real_escape_string($password)."'")

 Guardar contraseñas, números de tarjeta de crédito, dirección de correo, etc. de forma


segura con algoritmos actualizados como bcript.

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

Esquema de un sistema de autentificación

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.

GUIA PHP (PASO DE VARIABLES Y SEGURIDAD) REALIZADA POR DFMD 4


DESARROLLO CON PHP (PASO DE VARIABLES Y SEGURIDAD)

<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>

Pagina 2: Control.php que verificará que el usuario y contraseña sea el correcto

<?
//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
}
?>

Página 3: seguridad.php – Modulo de seguridad

GUIA PHP (PASO DE VARIABLES Y SEGURIDAD) REALIZADA POR DFMD 5


DESARROLLO CON PHP (PASO DE VARIABLES Y SEGURIDAD)

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();

//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO


if ($_SESSION["autentificado"] != "SI") {
//si no existe, envio a la página de autentificacion
header("Location: index.php");
//ademas salgo de este script
exit();
}
?>

Pagina 4: Archivos de la aplicación con acceso restringido en PHP

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>

Página 5: Salir de la aplicación segura

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

1. Realizar la multiplicación de 2 valores y mostrar el resultado en la misma página de


captura de datos.

GUIA PHP (PASO DE VARIABLES Y SEGURIDAD) REALIZADA POR DFMD 6


DESARROLLO CON PHP (PASO DE VARIABLES Y SEGURIDAD)

2. Hacer un aplicativo que el usuario adivine un numero entre 0 y 1000. El usuario va


digitando un número y el sistema le va diciendo si es < o > hasta que sea el numero
correcto. Mostrar resultados en la misma página.
3. Realizar un inicio de sesión con todas las recomendaciones de seguridad posibles y
configurarla para que al cabo de 5 minutos de inactividad, esta se cierre. (investigar).

GUIA PHP (PASO DE VARIABLES Y SEGURIDAD) REALIZADA POR DFMD 7

También podría gustarte