segurança php - por samyr abdo

Post on 06-Jun-2015

1.688 Views

Category:

Documents

5 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

SEGURANÇA PHP

Samyr Abdo

XSS

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.

XSS

Como atacar?

Simulando o ataque:

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

XSS

Como se proteger?

htmlspecialchars() htmlentities()

Converte caracteres especiais para a realidade HTML

SESSIONS

SESSIONS

Como funciona?

Principais ataques: Session fixation Session hijacking.

SESSIONS - SESSION FIXATION

Como atacar?

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

SESSIONS - SESSION FIXATION

Simulando o ataque:<?php

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

?>

SESSIONS - SESSION FIXATION

Testando a vulnerabilidade url + ?PHPSESSID=654321

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();}?>

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.

SESSIONS - SESSSION HIJACKING

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

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

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

INCLUDE X REQUIRE

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.

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); }

?>

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’;

} ?>

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.

PHP.INI

PHP.INI

expose_php = offPermite reduzir a quantidade de informações

disponíveis para o invasor.

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.

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`

INICIALIZAÇÃO DE VARIÁVEIS

INICIALIZAÇÃO DE VARIÁVEIS

Como atacar?

<?php

if (authenticated_user()) {

     $authorized = true;}

?>

auth.php?authorized=1

INICIALIZAÇÃO DE VARIÁVEIS

Como se proteger?<?php

$authorized = false;

if (authenticated_user()) 

{$authorized = true;

}

?>

SQL INJECTION

SQL INJECTION

Como atacar?

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

 

SQL INJECTION

Como atacar?

  ‘or 1=‘1

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

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

top related