protege tu aplicación de exploits relacionados con include() 0

Hora y Fecha: 5 de Junio de 2007 a las 11:17 am Autor: jorge albaladejo
Categorías:

Como hemos visto en capítulos anteriores sobre problemas de seguridad y sql injection, hay una serie de aspectos relacionados con la seguridad a tener en cuenta a la hora de diseñar una aplicación web. Uno de los más explotados es la falla abierta por un uso indebido de la función de php include().

Veamos un ejemplo:
<a href="?page=home.php">Inicio</a> | <a href="?page=contact.php">Contacto</a>
<?php
$page = $_GET['page'];
if ($page)
include $page;
else
echo "404, página no encontrada";
?>

En el ejemplo anterior, pasamos como variable ‘page’ el nombre del archivo (php en este caso, podría ser html u otra extensión), que será cargado en la línea correspondiente mediante ‘include’. La ausencia de filtrado de esta variable puede dejar nuestra aplicación prácticamente a merced de cualquier intruso poco experimentado, veamos por qué.
(more…)



seguridad en scripts y aplicaciones php 1

Hora y Fecha: 21 de Mayo de 2007 a las 10:24 am Autor: jorge albaladejo
Categorías:

Hemos visto en publicaciones anteriores cómo conectar a una base de datos mysql desde php, y cómo usar la función mysql_query para consultar datos.

Ahora vamos a hablar de seguridad en php. La aparente sencillez de uso de php muchas veces oculta su potencia, y no tener en cuenta ciertos detalles puede hacer que nuestra aplicación se vaya al traste con un solo ‘click’. Recordemos nuestra anterior función readTable

/* consulta los campos seleccionados de una tabla concreta de la base de datos
*@param table la tabla concreta
*@param fields los campos a consultar
*/
function readTable($table,$fields,$identifier)
{
//variables
$resultsArray = array();
//campos
$fieldsList = "";
foreach($fields as $key=>$value)
{
$fieldsList .= $value . ",";
}
//quitamos la última coma
$fieldsList = substr($fieldsList,0,strlen($fieldsList)-1);
//consulta
$query = "SELECT " . $fieldsList . " FROM " . $table;
$resultset = @mysql_query($query,$identifier);
if (@mysql_num_rows($resultset) > 0)
{
$i = 0;
while ($result = mysql_fetch_array($resultset))
{
$resultsArray[$i] = $result ;
$i++;
}
}
return($resultsArray);
}

Resumiendo, la llamada a la función readTable(’superheroes’,$fields,$token); podría permitir ejecutar código sql que no deseamos, y que podría dejar al aire nuestra aplicación.

(more…)