• No se han encontrado resultados

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre CODIGO LIMPIO CODIGO SEGURO.

N/A
N/A
Protected

Academic year: 2021

Share "PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre CODIGO LIMPIO CODIGO SEGURO."

Copied!
22
0
0

Texto completo

(1)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

CODIGO

SEGURO

CODIGO

LIMPIO

(2)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

La programación segura de PHP es esencial para no comprometer la seguridad de su servidor donde este alojada nuestra aplicación web. Una aplicación con mal diseño de seguridad es vulnerable usualmente a:

XSS: Cross-site scripting es un tipo de inseguridad informática o

agujero de seguridad basado en la explotación de vulnerabilidades del sistema de validación de HTML incrustado. Esta falla suele

producirse por varias razones : Variables no inicializadas correctamente, Ausencia de control de datos, entre otras.

(3)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre CSRF: Cross-site request forgery o falsificación de petición en

sitios cruzados, es un tipo de exploit malicioso de un sitio web en el que comandos no autorizados son transmitidos por un usuario en el sitio web que confía.

Esta vulnerabilidad es conocida también por otros nombres como

XSRF, enlace hostil, ataque de un click, cabalgamiento de sesión, y ataque automático.

(4)

SQL-injection: Es una vulnerabilidad informática en el nivel de la validación de las entradas a la base de datos de una aplicación. El origen es el filtrado incorrecto de las variables utilizadas en las partes del programa con

código SQL. Es, de hecho, un error de una clase más general de vulnerabilidades que puede ocurrir en cualquier lenguaje de

programación o de script que esté incrustado dentro de otro. Esta falla suele producirse por razones como: Ausencia de control de datos.

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

(5)

RFI: Este tipo de ataque es relativamente

desconocido entre desarrolladores, lo que hace que sea especialmente dañino. La inclusión de archivo

remoto, o RFI, involucra un ataque de una locación remota que explora una aplicación PHP vulnerable e inyecta código malicioso para lograr spamming o incluso acceso a la carpeta ruta del

servidor desde la barra de navegación.

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

(6)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

Para tener un código seguro hay que tener en cuenta básicamente 2 cosas:

Sanitizar y Validar

Sanitizar y Validar los datos, son los puntos de más importancia a la hora de programar una aplicación segura, y las que más

impacto tienen a la hora de la analizar la seguridad, debido que estos datos pueden ser manipulados por cualquier usuario, en muchos casos malintencionados.

(7)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre Que es Sanitizar? Es el proceso de aplicar una limpieza

exhaustiva a un dato o grupos de datos para su uso. Por ejemplo, FILTER_SANITIZE_EMAIL quita caracteres que no son los apropiados que contiene una dirección email.

Que es Validar? Es el proceso utilizado para validar o comprobar si los datos cumplen con ciertos requisitos

predefinidos. Por ejemplo, FILTER_VALIDATE_EMAIL

determinar si los datos contienen una dirección válida de correo electrónico, pero sin cambiar los datos en sí.

(8)

Normas para un código PHP seguro

00.- Jamás confiar en los usuarios.

01.- Siempre hay que validar los datos que están bajo el control de los usuarios. Hay que tener en cuenta que un usuario malicioso puede realizar una conexión HTTP válida con un sencillo "telnet" e introducir los datos que desee y en el formato que él quiera.

Nunca se debe pasar al sistema ningún dato que provenga de una entrada de usuario sin ser validada antes, y luego sanitizada. Usar las funciones htmlspecialchars(), htmlentities(), strip_tags() y

otras funciones para limpiar el HTML y Javascript.

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

(9)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

02.- Usar siempre $_POST - $_GET - $_COOKIE - $_FILE

para capturar los datos que provengan de otras páginas de nuestra aplicación. Debemos verificar que register_globals este en OFF . Usar solo $_REQUEST a menos que la variable que se este

usando no sea crítica y que la data que va en ella no sea sensible y no afecte al sistema.

03.- No usar solamente Javascript para validar datos. Javascript no ofrece una seguridad real. Siempre validen todos sus datos del

(10)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

04.- Aún cuando PHP es un lenguaje permisivo es buena

costumbre definir siempre las variables antes de usarlas settype(). 05.- Verificar que safe_mode este en ON (verifica si el dueño del script actual coincide con el dueño del fichero a ser operado por una función de fichero) de esta forma se comprueba que los archivos

sobre los que se trabaja desde otro archivo pertenecen al mismo propietario, evitando de esta forma que otra aplicación obtenga datos sin autorización.(Esta opción ha sido declarada

OBSOLETA desde PHP 5.3.0. Su uso está totalmente desaconsejado.)

(11)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

06.- Evitar el uso de permisos 777, para archivos y carpetas, en su lugar use 766. Para casos especiales use archivos .htaccess para colocar los permisos necesarios.

07.- Almacenar las claves en formato md5() o sha1() o cualquier otro tipo de cifrado. Si es combinado mejor.

08.- Magic Quotes fue descontinuada a partir de la versión PHP 5.3.0, por ello usar addslashes() para minimizar el riesgo de

(12)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

09.- Si necesita usar tener archivos .inc (haciendo referencia a includes) o .ini/.cfg (haciendo referencia a archivos de

configuración) coloque final .php ejemplo: config.ini.php, esto es debido que algunos servidores no procesan bien ese tipo de ficheros y pueden mostrar su contenido en modo texto.

10.- Utiliza el = = = para verificar valores de entrada (identidad de datos y de tipos).

(13)

11.- Limitar las entradas solamente a los tipos de datos que deba recibir, usar funciones tales como.

empty() Determina que una variable está vacía

isset() Determina si una variable ha sido declarada

ctype_alnum() Chequea posibles caracteres alfanuméricos ctype_alpha() Chequea posibles caracteres alfabéticos

ctype_digit () Chequea posibles caracteres numéricos

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

(14)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

12.- Deshabilitar el mostrar errores de ejecución o código. Solo se debe mostrar los errores en fase de desarrollo de la

aplicación, jamás en producción: ini_set('display_errors', 0);

También puede usar archivos .htaccess y colocar: php_value display_errors 0

(15)

13.- Usar expresiones regulares (Las expresiones regulares son una serie de caracteres que forman un patrón, normalmente

representativo de otro grupo de caracteres mayor, de tal forma que podemos comparar el patrón con otro conjunto de carácteres para ver las coincidencias.). Por ejemplo usar para sanitizar:

preg_match() Realiza una comparación con una expresión regular

preg_replace () Realiza una búsqueda y sustitución de una expresión regular

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

(16)

14.- Para evitar el RFI verificar las directivas:

allow_url_fopen allow_url_include

La directiva allow_url_fopen esta activada por defecto, y

allow_url_include está desactivada. Estas dos directivas simples protegerán adecuadamente tu sitio de cualquier ataque RFI.

También pueden usar archivo .htaccess

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

(17)

15.- Verificar la data en las sentencias SQL (MySQL)

mysql_real_escape_string() Escapa ciertos caracteres de una cadena en una sentencia SQL

Error e inseguro:

$query = "SELECT * FROM users WHERE user='{$_POST['user']}' AND pass='{$_POST['pass']}'";

Correcto y seguro:

$query = sprintf("SELECT user,name FROM users WHERE user='%s' AND pass='%s'",mysql_real_escape_string($_POST['user']),

mysql_real_escape_string($_POST['pass']);

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

(18)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

16.- Evitar el uso el comodín * en las sentencias SQL

17.- Sesiones y Cookies. Es preferible usar SESSION por 2

razones: las cookies requieren que el navegador soporte cookies; y en las cookies estas enviando todos los datos del servidor al nevegador y de vuelta en cada visualización, con lo que ello

conlleva (seguridad, limite de tamaño de cabeceras de peticiones, y un largo etc.).

Con las sesiones solo tienes que tener cuidado de que no se pierda el ID de session. El contenido de la session no sale del servidor.

(19)

18.- Usar urlencode y urldecode Codifica/Decodifica como URL una cadena $url = "http://www.ejemplo.com/index.php?q=".urlencode($_GET['var']); PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

(20)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

Herramientas y/o enlaces recomendados:

Getting Clean With PHP:

http://net.tutsplus.com/tutorials/php/getting-clean-with-php

Writing Secure PHP: http://www.addedbytes.com/writing-secure-php

PhpSecInfo: http://phpsec.org/projects/phpsecinfo/index.html

PHP Security Scanner: http://sourceforge.net/projects/securityscanner

Ratproxy: http://code.google.com/p/ratproxy/

Inspekt: http://code.google.com/p/inspekt/

Protección contra las técnicas de Blind SQL Injection:

http://www.elladodelmal.com/2007/07/proteccin-contra-las-tcnicas-de-blind.html

Pixy: XSS and SQLI Scanner for PHP Programs:

http://pixybox.seclab.tuwien.ac.at/pixy/index.php

(21)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

PREGUNTAS

(22)

PROGRAMACIÓN SEGURA EN PHP Héctor A. Mantellini VaSlibre

Héctor A. Mantellini

Twitter:

@xombra

http://www.xombra.com

@awvene

@vaslibre

Referencias

Documento similar

la aplicación web con software libre, al MIES INFA, las herramientas utilizadas son apache como servidor web, PHP como lenguaje de programación y MySQL como base de

Este trabajo esta orientado a la creación de una herramienta para la generación de la capa de acceso a datos para una aplicación WEB usando como lenguaje de programación

Al finalizar el Máster el alumno será capaz de dominar las técnicas más avanzadas y novedosas de diseño y programación Web gracias a la aplicación de los estándares web HTML 5

Este Master en Programación Web de Alto Rendimiento con Joomla + PHP + JavaScript + MySQL le prepara para ser programador web capaz de crear y mantener aplicaciones de gestión,

Al finalizar el Máster el alumno será capaz de dominar las técnicas más avanzadas y novedosas de diseño y programación Web gracias a la aplicación de los estándares web HTML5 y

Al finalizar el Master el alumno será capaz de dominar las técnicas más avanzadas y novedosas de diseño y programación Web gracias a la aplicación de los estándares web HTML5 y

Mediante la metodología Extreme Programing XP se desarrollara un aplicativo web basado en el lenguaje de programación php y el gestor de base de datos mysql el cual será usado por