• No results found

programacion_Segura_php.pdf

N/A
N/A
Protected

Academic year: 2020

Share "programacion_Segura_php.pdf"

Copied!
22
0
0

Loading.... (view fulltext now)

Full text

(1)

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

CODIGO

SEGURO

(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

(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

(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.

(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.

(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

(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.

(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

(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.

(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

(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

(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

(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']);

(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.).

(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

References

Related documents

Given this, iconic representations are sufficient for mechanistic explanation of distinctively information-processing systems, and offer a neat explanation of how the

The NEW MaxBin Storage system offers an unmatched level of flexibility and security and provides ample storage for medication and supplies for any care environment. MaxBin

DISTRIBUTION STATEMENT A -- Cleared for public release by OSR on 11 May 2010 -- SR Case 10-S-2090 Innovation, Speed and Agility Program Performance and Outcomes Major Program

Contribution margin ratio = Breakeven point in sales dollars LO 3 Determine the effects of changes in cost, volume, and profit on operating income.. Using the following

Zajednička pravilna primjena svih tih poreza unutar poreznih sustava država vrlo je važna jer distorzivni učinci koji su posljedica oporezivanja različitih izvora mogu biti

Gamma camera and study mbbs admission guidance in bangalore in the medical courses in india for neet any colleges in addition, many private college?. Least the counselling for mbbs

The record series Academic & Family Records contains material related to Highlands' academic career at the University of Maine (both as a student and professor) and at

The sawtooth and square pressure waveforms modeled by an infinite Fourier series are considered as a driven force of the flow and is a significant contribution to understand