Siguiendo continuamente con el tutorial anterior (link) acerca de la seguridad en gets. En la segunda parte, vamos a tratar la seguridad de cómo evitar el tipo de incidentes que pudieramos haber tenido con un tipo de aplicación killweb desarrollada en la primera parte, es decir, la inclusión remota de archivos dañinos para nuestra web. En el presente tutorial sólo presentaré dos métodos de seguridad, la imaginación es lo que cuenta para protejer nuestro site de todos los modos posibles, aunque de seguro, los novatos agradecerán este tipo de consejos para una posible futura o actual web que creen.
Bien, ya acabada la introducción paso a explicar qué hare en cada uno de los dos ejemplos que tengo preparados.
En el primero, situamos una situación exacta de los archivos que sólo podran ser incluidos desde nuestra web, es decir, todo link exterior pasador por variable no valdrá, si lo deseas hacer asi, hazlo manualmente en html. Como en la mayoria de mis proyectos a este también le he puesto nombre, 'Safe Web' en contradicción con el anterior 'Kill Web'.
Método de protección número 1 en $_GET;
Codigo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
<?php
####################################
## Safe Web by Bline para Mctekk.com
####################################
$var = $_GET['var'];
$filedir = 'miweb/archivos'; # Definimos la carpeta donde se encuentran nuestros archivos PHP a incluir.
$includefile = $_SERVER['DOCUMENT_ROOT'].'/'.$filedir.'/'.$var;
if(empty($var)){
include('news.php');
}elseif(is_file($includefile)){ # también se puede usar el file_exist
include($includefile);
}else{
die('No existe el archivo solicitado');
}
?>
|
Ahora procederé a explicar qué he usado y para qué. En principio como en todo script en php abrimos los tags <?php y lo cerramos con ?>, luego de eso, definimos como $var a la variable $_GET['var'] que va a ser la que pase los archivos php por la variable var.
Tras eso definimos $filedir, que será una variable que guardará la carpeta donde estarán los archivos PHP u otro tipo de archivos a incluir, la carpeta ha de estar a raiz de la web, es decir, si tus archivos estan en:
http://www.url.ext/miweb/archivos, en $filedir deberás poner 'miweb/archivos'. En $includefile añadimos la variable $_SERVER['DOCUMENT_ROOT'] que nos valdrá para definir que los archivos a incluir estén solo dentro de nuestra web y no exterior, luego tras eso añado $filedir para localizar la carpeta y tras eso $var, que será el archivo pasado por la variable que desees elegir.
La llamada a estos archivos serían algo asi: miweb/index.php?var=articulos.php o articulos.html o articulos.txt (...). Para hacer la web algo más dinámica, no obstante más limitada, si deseas llamar a los archivos de este modo: miweb/index.php?var=articulos (sin la extensión), solo tendrías que modificar en la variable $includefile, tras $var, añadir
.'.php', es decir de este modo ...'/'.$filedir.'/'.$var.'.php';. pero como ya dije, limita bastante el uso de extensiones.
Luego hacemos una condición, si la variable está vacia, se llama al archivo news.php (o el que tu elijas), en caso de no ser asi, comprueba con is_file que existe un archivo dentro de la carpeta especificada en $filedir con el nombre pasado por $var, y en ese caso, lo incluye, en caso contrario, si $var no esta vacia, y no existe el archivo dentro de la carpeta $filedir, el código "muere", es decir, PHP deja de leer lo que viene y para ahi con un mensaje de error, en este caso 'No existe el archivo solicitado'. Con esto concluye el primer ejemplo, a continuación el segundo.
Ahora vamos a pasar al segundo ejemplo de seguridad en php, quizás mas limitado que el anterior pero con más posibilidades de links externos.
Codigo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
<?php
####################################
## Safe Web by Bline para Mctekk.com
####################################
$var = $_GET['var'];
$filedir = 'miweb/archivos'; # Definimos la carpeta donde se encuentran nuestros archivos PHP a incluir.
$includefile = $_SERVER['DOCUMENT_ROOT'].'/'.$filedir.'/'.$var;
if(empty($var)){
include('news.php');
}elseif($var == 'articulos'){
include('url/articulos.php');
}elseif($var == 'galeria'){
include('url/donde/tengas/el/archivo/galeria.php');
}else{
die('El archivo especificado no existe');
}
?>
|
Las tres variables iniciales ya, y para ahorrar tiempo, están explicadas arriba, de modo que pasamos a las condiciones de seguridad.
Creamos una condicion, al igual que arriba, de que si no existe o si esta vacia $var, se incluye el archivo news.php, en caso contrario, si $var, es decir, la variable que usamos para pasar archivos, es igual a 'articulos' (miweb/index.php?var=articulos), se incluye el archivo contenido en el directorio que le digas, en caso contrario, si $var es igual (==) a galeria (miweb/index.php?var=galeria) se incluirá el archivo galeria.php especificado en el include de abajo. En caso contrario, es decir, si $var no esta vacia y no es igual a ninguno de las condificiones anteriores, el codigo muere como expliqué arriba.
Como ya dije antes, este código es más laborioso, pero te da mas juego a la hora de programar con archivos externos a tu web.
Con esto queda concluido el tutorial de seguridad en $_GET. Espero que haya servido de ayuda para los novatos y los no tan novatos.
Saludos Bline