Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Textos PHP Seguro
Textos PHP Seguro
PHP Seguro.
Al empezar un desarrollo WEB nos preguntamos de que forma podemos darle seguridad a nuestras aplicaciones con el fin de minimizar vulnerabilidades potenciales. Estas son algunas recomendaciones:
1 El usuario puede controlar ciertas cabeceras HTTP modificandolas para atacar un sitios, por ejemplo la cabecera
HTTP_REFERER. 2 Herramientas como firebug nos permiten modificar cdigo fuente HTML en tiempo real afectando el funcionamiento de una pagina WEB
SQL injection
La inyeccin de SQL nos permite hacer inyecciones de cdigo SQL en variables que interactan con cadenas de consulta con el fin de alterar dichas cadenas de consulta. Para evitar esto PHP nos prove de las funciones addslashes(), get_magic_quotes_gpc(),mysql_real_escape_string(). mysql_real_escape_string() Escapa caracteres especiales de una cadena de consulta SQL colocando una diagonal invertida antes de \x00, \n, \r, \, ', " y \x1a. Ejemplo: <?php
$usuario = Admin; $password = ' or 1='1 $sql = SELECT * FROM USUARIOS WHERE USUARIO = '.mysql_real_escape_string($usuario).' AND PASSWOD=.mysql_real_escape_string($password); //SELECT * FROM USUARIOS WHERE USUARIO = 'Admin' AND PASSWOD='\' or 1=\'1' ?>
addslashes() Escapa caracteres especiales en una cadena colocando una diagonal invertida antes de los caracteres ,',\, NUL (byte NULL). Ejemplo. <?php
$usuario = Admin; $password = ' or 1='1 $sql = SELECT * FROM USUARIOS WHERE PASSWOD=.addslashes($password); USUARIO = '.addslashes($usuario).' AND
//SELECT * FROM USUARIOS WHERE USUARIO = 'Admin' AND PASSWOD='\' or 1=\'1' ?>
get_magic_quotes_gpc() Funcin booleana que verifica en estado de configuracin de php.ini en las funciones magic_cuotes() que sirven para escapar caracteres especiales en variables enviadas por GET, POST o COOKIE, se puede combinar con las funciones anteriores. <?php
$usuario = $_POST[usuario]; $password =$_POST[password];
if(!get_magic_quotes_gpc()) {
$usuario = addslashes($usuario); $password = addslashes($password);
}
?>
Ejemplo:
//URL original page=home.php //URL alterada (Referencia a un script malo) page=../../../../../../../../../../../etc/passwd%00 <?php incluce($_GET[page]); //include(./../../../../../../../../../../etc/passwd); ?>
Para evitar esto es necesario evitar el control de funciones de inclusin a los usuarios.
<?php switch($_GET[page]) { case home:include ("./home.php"); break; case otro:include ("./otro.php"); break; default: include("./404.php"); break; } ?>
3 Siempre y cuando allow_url_fopen est habilitado en php.ini 4 La extensin del archivo no puede ser php debido a que PHP se ejecuta siempre en el servidor que lo aloja a menos que no lo soporte
EVASIN DE BOT'S
Un bot es un robot o programa que hace funciones rutinarias sustituyendo a un humano, estos bots son usados para obtener informacin de una pagina o para hacer uso de ciertas funciones de la misma de forma daina. La evasin de estos bots es muy difcil y mas aun cuando no queremos hacer uso del famoso CAPTCHA debido al fastidio que crea en los usuarios. Otra solucin poco viable es el uso de Javascript y AJAX para evitar que estos robots lean nuestra pagina ya que con esto sacrificamos posicionamiento y funcionalidad para las tecnologas mviles. Para este caso vamos a tratar de minimizar su efecto o por lo menos hacer pensar mas a quien programe un robot para visitarnos.
Cabecera HTTP_REFERER5.
Esta cabecera HTTP contiene la URL donde se hace referencia a la pagina en cuestin (La procedencia). Esto nos puede ayudar a validar la procedencia de las peticiones que se hacen a nuestro sitio.
<?php if($_SERVER[HTTP_REFERER] == http://misitio.com/formulario.php) { //Conjunto de instrucciones } else { //Conjunto de instrucciones para rechazar la peticin } ?>
Llaves dinmicas.
Son llaves generadas automticamente para validar una peticin que se hace a un servicio, son nicas e irrepetibles. En el caso de aplicaciones WEB se genera una llave y se imprime en la pagina de peticin para luego ser comparado en la pagina de respuesta. Con esto el robot tendra que conocer el token generado para cada peticin. Ejemplo: formulario.php
<?php session_start(); function getToken($name) { $alphanum = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdfghijklmnopqrstuvwxyz0123456789"; $token = md5(substr(md5(str_shuffle($alphanum)), 0, 10)); $_SESSION["token_".$name] = $token; return $token;
5 Vulnerable a header Spoofing
} ?> <html> <head> <title>EJEMPLO LLAVE</title> </head> <body> <form name=buscador method=post action=resultados.php> <input type=hidden name=token value=<?php echo getToken(buscar); ?> /> <input type=text name=nombre value= /> </form> </body> </html>
resultados.php
<?php session_start(); if($_POST[token] == $_SESSION[token_buscar]) { $_SESSION[token_buscar] == array(); //Conjunto de instrucciones } else { //Conjunto de instrucciones para rechazar la peticin } ?>
if($_SESSION["visitas_malas"] > 10) //Numero de visitas malas para declararlo robot { $_SESSION["humano"] = false; } //Conjunto de instrucciones } else { //Conjunto de instrucciones para rechazar la peticin echo "ACCESO DENEGADO A LOS ROBOTS!!!"; exit(); } } else { $_SESSION["humano"] = true; $_SESSION["visitas_malas"] = 0; $_SESSION["time"] = time(); } ?>
Con esto finalizamos este artculo, seguro que existen mas vulnerabilidades y mas formas de protegerte pero estas son las mas comunes y en las que mas tendemos a ser susceptibles. Esto lo escribo por que mi amigo el Gabono me preguntaba al respecto.
By Molder (Sombrero de paja) Aztlan Hack http://www.aztlan-hack.org msn: molder@aztlan-hack.org email: molder@aztlan-hack.org