segurança php - por samyr abdo

32
SEGURANÇA PHP Samyr Abdo

Upload: samyr-abdo

Post on 06-Jun-2015

1.688 views

Category:

Documents


5 download

DESCRIPTION

Apresentação que tem como objetivo mostrar algumas técnicas de segurança em programas desenvolvidos em PHP.

TRANSCRIPT

Page 1: Segurança PHP - por Samyr Abdo

SEGURANÇA PHP

Samyr Abdo

Page 2: Segurança PHP - por Samyr Abdo

XSS

Page 3: Segurança PHP - por Samyr Abdo

XSS

XSS(Cross Site Scripting) é uma técnica utilizada para roubar sessões (cookies) em uma aplicação web.

Como funciona?

Injeção de tags html e comandos javascript em alguma função de um sistema.

Page 4: Segurança PHP - por Samyr Abdo

XSS

Como atacar?

Simulando o ataque:

http://localhost/seguranca/xss.php?temp=<script>alert(document.cookie)</script>

Page 5: Segurança PHP - por Samyr Abdo

XSS

Como se proteger?

htmlspecialchars() htmlentities()

Converte caracteres especiais para a realidade HTML

Page 6: Segurança PHP - por Samyr Abdo

SESSIONS

Page 7: Segurança PHP - por Samyr Abdo

SESSIONS

Como funciona?

Principais ataques: Session fixation Session hijacking.

Page 8: Segurança PHP - por Samyr Abdo

SESSIONS - SESSION FIXATION

Como atacar?

<a href="http://www.dominio-exemplo.com?PHPSESSID=987654321">Acessar</a>

Page 9: Segurança PHP - por Samyr Abdo

SESSIONS - SESSION FIXATION

Simulando o ataque:<?php

session_start(); if (!array_key_exists('visitas', $_SESSION)) $_SESSION['visitas'] = 1;else $_SESSION['visitas']++; echo $_SESSION['visitas'];

?>

Page 10: Segurança PHP - por Samyr Abdo

SESSIONS - SESSION FIXATION

Testando a vulnerabilidade url + ?PHPSESSID=654321

Page 11: Segurança PHP - por Samyr Abdo

SESSIONS - SESSION FIXATION

Como se proteger? Basta gerar novamente o identificador de sessão

toda vez que o usuário autenticar.Ex.:

<?phpif (usuario_autenticado()) { session_regenerate_id();}?>

Page 12: Segurança PHP - por Samyr Abdo

SESSIONS - SESSSION HIJACKING

Ataque mais difícil de se proteger, porém mais difícil de ser explorado.

Devido ao identificador da sessão estar gravado em um cookie no navegador, o usuário malicioso pode explorar alguma vulnerabilidade do browser ou obter os cookies do navegador através de um ataque chamado XSS.

Page 13: Segurança PHP - por Samyr Abdo

SESSIONS - SESSSION HIJACKING

Como se proteger? Chegar algum dos headers da aplicação. Criptografia md5

Page 14: Segurança PHP - por Samyr Abdo

SESSIONS - SESSSION HIJACKING

Header “HTTP_USER_AGENT” Exemplo do Header no Mozilla:

Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1

Exemplo do Header no Chrome:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML,

like Gecko) Chrome/16.0.912.77 Safari/535.7

Page 15: Segurança PHP - por Samyr Abdo

SESSIONS - SESSSION HIJACKING

Ex:<?php session_start(); if (array_key_exists('HTTP_USER_AGENT', $_SESSION)){ if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) { /* Acesso inválido. O header User-Agent mudou durante a mesma sessão. */ exit; }}else{ /* Primeiro acesso do usuário, vamos gravar na sessão um hash md5 do header User-Agent */ $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);}?>

Page 16: Segurança PHP - por Samyr Abdo

INCLUDE X REQUIRE

Page 17: Segurança PHP - por Samyr Abdo

INCLUDE X REQUIRE

Include(): Tenta incluir uma página. Em caso de erro, o script retorna um warning (aviso) e prossegue com a execução do script.

Require(): Tenta incluir uma página. Em caso de erro, o script retorna um fatal error e aborta a execução do script.

Page 18: Segurança PHP - por Samyr Abdo

INCLUDE X REQUIRE

Como atacar? RFI (Remote File Inclusion) e LFI (Local File Inclusion)Ex:Endereço: index.php?url=[Parâmetro]

<?php

if (isset($_GET['url'])){

$pg = $_GET['url']; include($pg); }

?>

Page 19: Segurança PHP - por Samyr Abdo

INCLUDE X REQUIRE

Como se proteger? RFI (Remote File Inclusion) – uso de expressões

regularesEndereço: index.php?url=[Parâmetro] <?phpif (isset($_GET['url'])){

$pg = $_GET['url'];$testa = '/([http])([:]{1})/';

if (preg_match($testa,$pg) != TRUE) include($pg);

else echo ‘ERRADO’;

} ?>

Page 20: Segurança PHP - por Samyr Abdo

INCLUDE X REQUIRE

Como se proteger? LFI (Local File Inclusion) – configuração do php.ini

allow_url_fopen = Offpermite abrir ou processar uma página ou arquivo externo dentro do script php.

Page 21: Segurança PHP - por Samyr Abdo

PHP.INI

Page 22: Segurança PHP - por Samyr Abdo

PHP.INI

expose_php = offPermite reduzir a quantidade de informações

disponíveis para o invasor.

Page 23: Segurança PHP - por Samyr Abdo

PHP.INI – OCULTANDO ERROS

error_reporting = E_ALLdisplay_errors = Off

Para que não seja exibido qualquer erro, aviso ou notice no site ou aplicativo.

Page 24: Segurança PHP - por Samyr Abdo

PHP.INI – OCULTANDO ERROS

Ex:

Ocorreu um erro no banco de dados

Error Number: 1054

Unknown column 'ordem' in 'order clause'

SELECT `compra_contrata`.* FROM `compra_contrata` WHERE `status` = 1 AND `data_final` >= '2012-01-30' ORDER BY `ordem`

Page 25: Segurança PHP - por Samyr Abdo

INICIALIZAÇÃO DE VARIÁVEIS

Page 26: Segurança PHP - por Samyr Abdo

INICIALIZAÇÃO DE VARIÁVEIS

Como atacar?

<?php

if (authenticated_user()) {

     $authorized = true;}

?>

auth.php?authorized=1

Page 27: Segurança PHP - por Samyr Abdo

INICIALIZAÇÃO DE VARIÁVEIS

Como se proteger?<?php

$authorized = false;

if (authenticated_user()) 

{$authorized = true;

}

?>

Page 28: Segurança PHP - por Samyr Abdo

SQL INJECTION

Page 29: Segurança PHP - por Samyr Abdo

SQL INJECTION

Como atacar?

"SELECT * FROM usuarios WHERE usuario= ‘{$usuario}’ AND senha = ‘{ $senha }’"

 

Page 30: Segurança PHP - por Samyr Abdo

SQL INJECTION

Como atacar?

  ‘or 1=‘1

SELECT * FROM usuarios WHERE usuario = ‘ ‘ AND senha = ‘ ’ OR 1=‘1’

Page 31: Segurança PHP - por Samyr Abdo

SQL INJECTION

Como se proteger?

addslashes()/stripslashes(): insere o caracter de escape antes de aspas

simples ou duplas, antes da barra invertida e antes do caracter NULL.

mysql_real_escape_string(): Escapa os caracteres especiais numa string para

usar em um comando SQL

Page 32: Segurança PHP - por Samyr Abdo