segurança php - por samyr abdo
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/1.jpg)
SEGURANÇA PHP
Samyr Abdo
![Page 2: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/2.jpg)
XSS
![Page 3: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/5.jpg)
XSS
Como se proteger?
htmlspecialchars() htmlentities()
Converte caracteres especiais para a realidade HTML
![Page 6: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/6.jpg)
SESSIONS
![Page 7: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/7.jpg)
SESSIONS
Como funciona?
Principais ataques: Session fixation Session hijacking.
![Page 8: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/8.jpg)
SESSIONS - SESSION FIXATION
Como atacar?
<a href="http://www.dominio-exemplo.com?PHPSESSID=987654321">Acessar</a>
![Page 9: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/10.jpg)
SESSIONS - SESSION FIXATION
Testando a vulnerabilidade url + ?PHPSESSID=654321
![Page 11: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/13.jpg)
SESSIONS - SESSSION HIJACKING
Como se proteger? Chegar algum dos headers da aplicação. Criptografia md5
![Page 14: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/16.jpg)
INCLUDE X REQUIRE
![Page 17: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/21.jpg)
PHP.INI
![Page 22: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/22.jpg)
PHP.INI
expose_php = offPermite reduzir a quantidade de informações
disponíveis para o invasor.
![Page 23: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/24.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/25.jpg)
INICIALIZAÇÃO DE VARIÁVEIS
![Page 26: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/26.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/27.jpg)
INICIALIZAÇÃO DE VARIÁVEIS
Como se proteger?<?php
$authorized = false;
if (authenticated_user())
{$authorized = true;
}
?>
![Page 28: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/28.jpg)
SQL INJECTION
![Page 29: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/29.jpg)
SQL INJECTION
Como atacar?
"SELECT * FROM usuarios WHERE usuario= ‘{$usuario}’ AND senha = ‘{ $senha }’"
![Page 30: Segurança PHP - por Samyr Abdo](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/30.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/31.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022081603/55731d0dd8b42aae7b8b49ae/html5/thumbnails/32.jpg)