SlideShare uma empresa Scribd logo
MySQL e PHP: Segurança
Carlos Santos
LabMM 4 - NTC - DeCA - UA
Aula PHP+MySQL 07, 23-05-2012
MySQL: recomendações

servidor MySQL

  • nunca utilizar o utilizador root para o acesso às BDs
  • para cada BD, definir um novo utilizador só com acesso via localhost
MySQL: recomendações

no servidor MySQL

  • atribuir os privilégios estritamente necessários a esse utilizador e apenas
    na BD com que ele irá interagir
  • se necessário, ter utilizadores com privilégios diferenciados para
    frontoffice e backoffice
Paradigma “need to know only”

esconder toda a informação que permita saber mais do que é necessário
sobre:
  • ficheiros e pastas do servidor
  • configuração do servidor Web
  • configuração do PHP no servidor Web
  • estrutura da BD
Listagem de diretórios/pastas

não permitir o directory browsing

  • não permitir ver os conteúdos de uma pasta quando não existe um
    ficheiro por defeito
  • colocar na pasta um ficheiro .htaccess (Options -Indexes)
  • os efeitos do .htaccess são reflectidos nas subpastas
Informação sobre o servidor Web

esconder informação sobre o servidor Web

  • no .htaccess (ServerSignature Off)
  • também é possível utilizando o httpd.conf
  • qualquer informação disponível pode dar pistas que facilitam o
    reconhecimento de falhas de segurança a explorar!
Configuração do PHP

esconder informação sobre a configuração do PHP no servidor

  • não permitir a execução da função phpinfo()
     • php.ini (disable_functions = phpinfo)




     • esta diretiva do php.ini pode ser utilizada para outras funções
       potencialmente perigosas (disable_functions = phpinfo, exec,
      passthru, shell_exec, system, proc_open, popen,
      curl_exec, curl_multi_exec, parse_ini_file, show_source)


  • não expor informação sobre o PHP
     • php.ini (expose_php = ‘off’)
Mensagens de erro do PHP

esconder mensagens de erros do PHP (expõem informações importantes
sobre os ficheiros, servidor e PHP)
  • php.ini
    ; E_ALL & ~E_NOTICE (Show all errors, except for notices and coding standards warnings.)
    ; E_ALL & ~E_NOTICE | E_STRICT (Show all errors, except for notices)
    ; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors)
    ; E_ALL | E_STRICT (Show all errors, warnings and notices including coding standards.)
    ; Default Value: E_ALL & ~E_NOTICE
    ; Development Value: E_ALL | E_STRICT
    ; Production Value: E_ALL & ~E_DEPRECATED
    error_reporting = E_ALL & ~E_DEPRECATED
    ; Default Value: On
    ; Development Value: On
    ; Production Value: Off
    display_errors = Off

  • em produção, ter log dos erros: log_errors=On e error_log=“file”
Exemplo: log file
Mais recomendações

PHP Security Consortium (http://phpsec.org/)

  • na secção de projectos:
     • Security Guide (PDF)
     • PHPSecInfo: aplicação (Download & install)
Execução de ficheiros via Web

impedir que se possam visualizar/alterar ou executar, via web, ficheiros
potencialmente perigosos
  • .htaccess
    <Files ~ ".(log|inc|sql|ini)$">
       Order allow,deny
                                                 extensões não permitidas
       Deny from all
    </Files>

    <Files ~ "^.ht">
       Order allow,deny             impedir o acesso ao .htaccess
       Deny from all
       Satisfy All
    </Files>
Inclusão e upload de ficheiros

incluir ficheiros sempre através do require/require_once -> qualquer erro
termina execução do PHP



no upload de ficheiros a partir de uma formulário:

  • testar a extensão do ficheiro carregado: $_FILES[‘ficheiro’][‘type’] ou
    através da função pathinfo()
  • testar o tamanho do ficheiro carregado: $_FILES[‘ficheiro’][‘size’] ou
    através da função filesize()
  • no final usar sempre a função move_uploaded_file(), para colocar o
    ficheiro na sua pasta destino
Filtragem de dados

muitas das ameaças à segurança pode provir de dados maliciosos
introduzidos em formulários, variáveis superglobais ($_GET, $_POST,
$_SESSION, $_FILES, etc), queries à BD, etc…

  • filtragem lógica -> associada à lógica do algoritmo de processamento
    dos dados
  • filtragem de limpeza -> remoção de todos os caracteres potencialmente
    perigosos nos dados
  • usar sempre -> filtragem cliente-side (JavaScript) + filtragem server-
    side (PHP)
  • evitar utilização de hidden form fields
  • evitar, sempre que possível, a passagem de parâmetros na Query String
    -> usar Variáveis de sessão
     • parâmetros na Query String -> são de fácil edição e partilha e podem
       revelar estrutura da BD ou de outros parâmetros da aplicação
Filtragem e codificação de dados

Valores contidos numa variável

  • filter_var($a, FILTER_VALIDATE_INT);
  • filter_var($a, FILTER_SANITIZE_NUMBER_INT);


  • filter_var($b, FILTER_VALIDATE_EMAIL);
  • filter_var($b, FILTER_SANITIZE_EMAIL);


  • Mais critérios em http://php.net/manual/en/filter.constants.php
  • Artigo sobre filtragem: http://www.phpro.org/tutorials/Filtering-Data-with-
    PHP.html
Filtragem e codificação de dados

preservar a formatação HTML mas codificar inputs para utilizarem HTML
entities
  • htmlentities($d);

limpar tags HTML e PHP
  • strip_tags($e);

problemas com codificação
  • utf8_encode($e1);
  • utf8_decode($e2);

Retirar espaços do início e do final de uma string

  • trim($a);
Filtragem e codificação de dados

get_magic_quotes_gpc() -> avalia o estado da directiva no php.ini

  • por defeito está “Off” (no PHP 6 será removida!)
  • quando “On” todos os valores vindos por $_GET, $_POST, $_COOKIE
    recebem o escape automático de certos caracteres: ‘, ”, 

stripslashes() -> remove as  de uma string

mysql_real_escape_string() -> faz o escape de ‘, “ e
SQL Injection

A introdução de inputs não filtrados nas queries pode originar falhas de
segurança. É inadmissível em páginas de produção!
SQL Injection: funções de filtragem

remover eventuais comandos SQL

  • preg_replace ($padrao_a_procurar, $valor_substituicao,
    $string_alvo_da_procura)
                                                   palavras a procurar
  • $padrao_a_procurar = “/(…|…|…)/i”            (expressões regulares).
                                               “i” no final torna pesquisa
                                                     case insensitive




    function valida($a) {
      $a = strip_tags($a); //remover tags
      $a = mysql_real_escape_string($a);
      $padrao = "/(select|from|where|like|order|drop|insert|
      delete|update|values|and|or|create|tables|table|#|;)/i";
      $a = preg_replace($padrao, "", $a);
      $a = trim($a);
      return $a;
    }!
Outras funções úteis na filtragem/validação

pesquisa de padrões

  • preg_match($padrao_a_procurar, $string_alvo_da_procura);
     • preg_match("/@ua.pt/i",$f);
     • preg_match("/^(?!d+$|[a-z]+$|.*[W_])/i",$g);
     • http://www.phpf1.com/tutorial/php-regular-expression.html
     • http://weblogtoolscollection.com/regex/regex.php


  • ctype_alnum($string); -> valida caracteres alfanuméricos
  • ctype_alpha($string); -> validação de caracteres alfabéticos
  • ctype_digit($string); -> valida caracteres numéricos
Codificação de passwords

Armazenar na BD as passwords codificadas!

  • MD5 (128bits)
     • $pwd_codif = md5($pwd);
  • SHA1 (160bits) ou hash()
     • $pwd_codif = sha1($pwd);
  • BASE64
     • $pwd_codif = base64_encode($pwd);
     • $pwd = base64_decode($pwd_codif);
  • hash(...) e crypt(...)
     • permitem escolher o tipo de codificação
     • o crypt() permite adicionar uma string de SALT
XSS - Cross Site Scripting

Introdução de código (normalmente JS) em áreas de User Generated
Content (blogues, fóruns, comments, etc.)
  • não é um ataque direto ao site, mas sim ao utilizador…
  • diferenças entre browsers!
  • Exemplo 1
     • Input: <script language="javascript"> document.location="http://
       www.ua.pt"; </script>
       echo $_POST['campo1']; //vai redirecionar
  • Exemplo 2
     • Input: <script language="javascript"> document.location="http://
       www.ua.pt"; </script>
       echo strip_tags($_POST['campo1']);               //não redireciona
       echo htmlentities($_POST['campo1']); //não redireciona

Mais conteúdo relacionado

PDF
LabMM4 (T22 - 12/13) - segurança
PPTX
PDF
Linguagem PHP
ODP
Php 02 Primeiros Passos
PPT
Prog web 02-php-primeiros-passos
PDF
PPTX
Aula 5 PHP - Criação de sites II
PPTX
Arrays PHP - Criação de sites II
LabMM4 (T22 - 12/13) - segurança
Linguagem PHP
Php 02 Primeiros Passos
Prog web 02-php-primeiros-passos
Aula 5 PHP - Criação de sites II
Arrays PHP - Criação de sites II

Mais procurados (20)

ODP
Workshop - Desenvolvimento web com Drupal 7
PPT
Curso de Introdução - PHP
PDF
Aula 12 Relatório - Tabelas
PDF
jQuery Simplificando o JavaScript
PDF
Curso PHP UNIFACS 2014.1 – 2ª aula
PDF
Desenvolvimento ágil com Kohana framework
PDF
PHP Jedi - Boas Práticas e Alta Performance
PDF
PHP Experience 2016 - [Palestra] Keynote: PHP-7
PDF
Aula 01 PHP+MySQL - LabMM4
PPTX
Introdução ao PHP - Criação de sites II
PDF
modernizando a arquitertura de sua aplicação
PDF
Introdução a ciência de dados com Python
KEY
SPL Datastructures
PDF
Crawling - Coleta de dados na Web com PHP
PDF
Mini Curso PHP Twig - PHP Conference 2017
PPT
2ª aula php
PPT
PHP - Arrays
PDF
PHP 5.3 - Arrays
PDF
Introdução ao Ruby
PDF
LabMM4 (T16 - 12/13) - PHP + MySQL
Workshop - Desenvolvimento web com Drupal 7
Curso de Introdução - PHP
Aula 12 Relatório - Tabelas
jQuery Simplificando o JavaScript
Curso PHP UNIFACS 2014.1 – 2ª aula
Desenvolvimento ágil com Kohana framework
PHP Jedi - Boas Práticas e Alta Performance
PHP Experience 2016 - [Palestra] Keynote: PHP-7
Aula 01 PHP+MySQL - LabMM4
Introdução ao PHP - Criação de sites II
modernizando a arquitertura de sua aplicação
Introdução a ciência de dados com Python
SPL Datastructures
Crawling - Coleta de dados na Web com PHP
Mini Curso PHP Twig - PHP Conference 2017
2ª aula php
PHP - Arrays
PHP 5.3 - Arrays
Introdução ao Ruby
LabMM4 (T16 - 12/13) - PHP + MySQL
Anúncio

Destaque (6)

PDF
PHP MySQL Aula 08
PDF
(A03) LabMM3 - Introdução à programação
PDF
Building a shared Personal Learning Environment with SAPO Campus
PDF
(A02) LabMM3 - Introdução à programação
PDF
LabMM3 - Exercício de revi
PDF
TDI - Desafios para componente prática
PHP MySQL Aula 08
(A03) LabMM3 - Introdução à programação
Building a shared Personal Learning Environment with SAPO Campus
(A02) LabMM3 - Introdução à programação
LabMM3 - Exercício de revi
TDI - Desafios para componente prática
Anúncio

Semelhante a PHP MySQL Aula 07 (20)

PDF
Escrevendo códigos php seguros
PDF
Hello SAFE World!!!
PPTX
Doctrine for dummies
PPT
PHP FrameWARks - FISL
PPT
Php FrameWARks - sem CakePHP
PDF
PHP like a super hero
ODP
Sapo Sessions PHP
PDF
Simplificando o Javascrip
PDF
Migrando para o PHP 5
PPSX
Segurança Web: O MMA da Tecnologia
PPTX
PHP robusto com Zend Framework
PDF
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
PDF
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PDF
Dev Ext PHP
PDF
Rest Beer v2
PDF
Web App Flaws - SQL Injection
PDF
Zephir
PPTX
Proteja sua aplicação com o zend framework 2
PDF
Desevolvimento Web Client-side - HTML
PPSX
5 Maneiras de melhorar seu código PHP
Escrevendo códigos php seguros
Hello SAFE World!!!
Doctrine for dummies
PHP FrameWARks - FISL
Php FrameWARks - sem CakePHP
PHP like a super hero
Sapo Sessions PHP
Simplificando o Javascrip
Migrando para o PHP 5
Segurança Web: O MMA da Tecnologia
PHP robusto com Zend Framework
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
Dev Ext PHP
Rest Beer v2
Web App Flaws - SQL Injection
Zephir
Proteja sua aplicação com o zend framework 2
Desevolvimento Web Client-side - HTML
5 Maneiras de melhorar seu código PHP

Mais de Carlos Santos (20)

PDF
Modelo de CBL transversal ao 1º ano do ciclo de estudos do Mestrado em Comuni...
PPTX
Dataficação no Ensino Superior: Reflexões sobre Ética, Impacto e Transformaç...
PPTX
Dataficação no Ensino Superior: Reflexões sobre Ética, Impacto e Transformaç...
PDF
Is AI the Spice of our future?
PPTX
Mentoria entre pares de estudantes para estudantes
PDF
1º Encontro Científico TCEdu
PDF
Tecnologias da Comunicação em Educação 2018: Aula inicial
PPTX
AVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunos
PDF
AVILA Crew – Uma experiência de tutoria de alunos para alunos
PDF
chmod 777 education
PPTX
Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...
PDF
Tecnologias da Comunicação em Educação: trabalho prático
PPTX
Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)
PDF
chmod 777 education
PDF
SAPO Campus towards a
 Smart Learning Environment
PDF
Repensar a tecnologia em contexto educativo: o caso do SAPO Campus
PDF
A technological approach to Open and Social Learning: 
the SAPO Campus project
PDF
SAPO Campus: Gamification em contexto educativo
PDF
Repensar a tecnologia em contextos educativos: o SAPO Campus no DeCA
PDF
T20_LM3: APIs e Scoreoid
Modelo de CBL transversal ao 1º ano do ciclo de estudos do Mestrado em Comuni...
Dataficação no Ensino Superior: Reflexões sobre Ética, Impacto e Transformaç...
Dataficação no Ensino Superior: Reflexões sobre Ética, Impacto e Transformaç...
Is AI the Spice of our future?
Mentoria entre pares de estudantes para estudantes
1º Encontro Científico TCEdu
Tecnologias da Comunicação em Educação 2018: Aula inicial
AVILA Crew - Uma experiência de tutoria (com jogos) de alunos para alunos
AVILA Crew – Uma experiência de tutoria de alunos para alunos
chmod 777 education
Mestrado em Comunicação Multimédia da Universidade de Aveiro - Sessão de acol...
Tecnologias da Comunicação em Educação: trabalho prático
Sessão de acolhimento do MCMM da Universidade de Aveiro (2016/2017)
chmod 777 education
SAPO Campus towards a
 Smart Learning Environment
Repensar a tecnologia em contexto educativo: o caso do SAPO Campus
A technological approach to Open and Social Learning: 
the SAPO Campus project
SAPO Campus: Gamification em contexto educativo
Repensar a tecnologia em contextos educativos: o SAPO Campus no DeCA
T20_LM3: APIs e Scoreoid

Último (20)

PPTX
disciplulado curso preparatorio para novos
PPTX
Biologia celular: citologia, é o estudo da célula, a unidade básica da vida.
PPTX
O Romantismo e a identidade brasileira..
PDF
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
PDF
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
PPTX
Revolução Industrial - Aula Expositiva - 3U4.pptx
PDF
Uma Introdução às Ciências do Alcorão (Islam)
PDF
embriologia_animal_aula_share_2026_semestre
PPT
sistema reprodutor para turmas do oitavo ano
PDF
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
PDF
A Revolução Francesa de 1789 slides história
PPTX
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
PPTX
Aula 13 - Tópico Frasal - Argumentação.pptx
PPTX
HISTÓRIA DO BRASIL - anos de Democracia.pptx
PDF
A provisão de jojuador (ramadã) islamismo
PPTX
GUERRAFRIA.pptdddddddddddddddddddddddddx
PPTX
Pedagogia em Ambientes Não Escolares.pptx
PDF
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf
PPTX
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
PDF
Metabolismo_energético_3ano_pre_vest_2026.pdf
disciplulado curso preparatorio para novos
Biologia celular: citologia, é o estudo da célula, a unidade básica da vida.
O Romantismo e a identidade brasileira..
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
Revolução Industrial - Aula Expositiva - 3U4.pptx
Uma Introdução às Ciências do Alcorão (Islam)
embriologia_animal_aula_share_2026_semestre
sistema reprodutor para turmas do oitavo ano
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
A Revolução Francesa de 1789 slides história
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
Aula 13 - Tópico Frasal - Argumentação.pptx
HISTÓRIA DO BRASIL - anos de Democracia.pptx
A provisão de jojuador (ramadã) islamismo
GUERRAFRIA.pptdddddddddddddddddddddddddx
Pedagogia em Ambientes Não Escolares.pptx
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
Metabolismo_energético_3ano_pre_vest_2026.pdf

PHP MySQL Aula 07

  • 1. MySQL e PHP: Segurança Carlos Santos LabMM 4 - NTC - DeCA - UA Aula PHP+MySQL 07, 23-05-2012
  • 2. MySQL: recomendações servidor MySQL • nunca utilizar o utilizador root para o acesso às BDs • para cada BD, definir um novo utilizador só com acesso via localhost
  • 3. MySQL: recomendações no servidor MySQL • atribuir os privilégios estritamente necessários a esse utilizador e apenas na BD com que ele irá interagir • se necessário, ter utilizadores com privilégios diferenciados para frontoffice e backoffice
  • 4. Paradigma “need to know only” esconder toda a informação que permita saber mais do que é necessário sobre: • ficheiros e pastas do servidor • configuração do servidor Web • configuração do PHP no servidor Web • estrutura da BD
  • 5. Listagem de diretórios/pastas não permitir o directory browsing • não permitir ver os conteúdos de uma pasta quando não existe um ficheiro por defeito • colocar na pasta um ficheiro .htaccess (Options -Indexes) • os efeitos do .htaccess são reflectidos nas subpastas
  • 6. Informação sobre o servidor Web esconder informação sobre o servidor Web • no .htaccess (ServerSignature Off) • também é possível utilizando o httpd.conf • qualquer informação disponível pode dar pistas que facilitam o reconhecimento de falhas de segurança a explorar!
  • 7. Configuração do PHP esconder informação sobre a configuração do PHP no servidor • não permitir a execução da função phpinfo() • php.ini (disable_functions = phpinfo) • esta diretiva do php.ini pode ser utilizada para outras funções potencialmente perigosas (disable_functions = phpinfo, exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source) • não expor informação sobre o PHP • php.ini (expose_php = ‘off’)
  • 8. Mensagens de erro do PHP esconder mensagens de erros do PHP (expõem informações importantes sobre os ficheiros, servidor e PHP) • php.ini ; E_ALL & ~E_NOTICE (Show all errors, except for notices and coding standards warnings.) ; E_ALL & ~E_NOTICE | E_STRICT (Show all errors, except for notices) ; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR (Show only errors) ; E_ALL | E_STRICT (Show all errors, warnings and notices including coding standards.) ; Default Value: E_ALL & ~E_NOTICE ; Development Value: E_ALL | E_STRICT ; Production Value: E_ALL & ~E_DEPRECATED error_reporting = E_ALL & ~E_DEPRECATED ; Default Value: On ; Development Value: On ; Production Value: Off display_errors = Off • em produção, ter log dos erros: log_errors=On e error_log=“file”
  • 10. Mais recomendações PHP Security Consortium (http://phpsec.org/) • na secção de projectos: • Security Guide (PDF) • PHPSecInfo: aplicação (Download & install)
  • 11. Execução de ficheiros via Web impedir que se possam visualizar/alterar ou executar, via web, ficheiros potencialmente perigosos • .htaccess <Files ~ ".(log|inc|sql|ini)$"> Order allow,deny extensões não permitidas Deny from all </Files> <Files ~ "^.ht"> Order allow,deny impedir o acesso ao .htaccess Deny from all Satisfy All </Files>
  • 12. Inclusão e upload de ficheiros incluir ficheiros sempre através do require/require_once -> qualquer erro termina execução do PHP no upload de ficheiros a partir de uma formulário: • testar a extensão do ficheiro carregado: $_FILES[‘ficheiro’][‘type’] ou através da função pathinfo() • testar o tamanho do ficheiro carregado: $_FILES[‘ficheiro’][‘size’] ou através da função filesize() • no final usar sempre a função move_uploaded_file(), para colocar o ficheiro na sua pasta destino
  • 13. Filtragem de dados muitas das ameaças à segurança pode provir de dados maliciosos introduzidos em formulários, variáveis superglobais ($_GET, $_POST, $_SESSION, $_FILES, etc), queries à BD, etc… • filtragem lógica -> associada à lógica do algoritmo de processamento dos dados • filtragem de limpeza -> remoção de todos os caracteres potencialmente perigosos nos dados • usar sempre -> filtragem cliente-side (JavaScript) + filtragem server- side (PHP) • evitar utilização de hidden form fields • evitar, sempre que possível, a passagem de parâmetros na Query String -> usar Variáveis de sessão • parâmetros na Query String -> são de fácil edição e partilha e podem revelar estrutura da BD ou de outros parâmetros da aplicação
  • 14. Filtragem e codificação de dados Valores contidos numa variável • filter_var($a, FILTER_VALIDATE_INT); • filter_var($a, FILTER_SANITIZE_NUMBER_INT); • filter_var($b, FILTER_VALIDATE_EMAIL); • filter_var($b, FILTER_SANITIZE_EMAIL); • Mais critérios em http://php.net/manual/en/filter.constants.php • Artigo sobre filtragem: http://www.phpro.org/tutorials/Filtering-Data-with- PHP.html
  • 15. Filtragem e codificação de dados preservar a formatação HTML mas codificar inputs para utilizarem HTML entities • htmlentities($d); limpar tags HTML e PHP • strip_tags($e); problemas com codificação • utf8_encode($e1); • utf8_decode($e2); Retirar espaços do início e do final de uma string • trim($a);
  • 16. Filtragem e codificação de dados get_magic_quotes_gpc() -> avalia o estado da directiva no php.ini • por defeito está “Off” (no PHP 6 será removida!) • quando “On” todos os valores vindos por $_GET, $_POST, $_COOKIE recebem o escape automático de certos caracteres: ‘, ”, stripslashes() -> remove as de uma string mysql_real_escape_string() -> faz o escape de ‘, “ e
  • 17. SQL Injection A introdução de inputs não filtrados nas queries pode originar falhas de segurança. É inadmissível em páginas de produção!
  • 18. SQL Injection: funções de filtragem remover eventuais comandos SQL • preg_replace ($padrao_a_procurar, $valor_substituicao, $string_alvo_da_procura) palavras a procurar • $padrao_a_procurar = “/(…|…|…)/i” (expressões regulares). “i” no final torna pesquisa case insensitive function valida($a) { $a = strip_tags($a); //remover tags $a = mysql_real_escape_string($a); $padrao = "/(select|from|where|like|order|drop|insert| delete|update|values|and|or|create|tables|table|#|;)/i"; $a = preg_replace($padrao, "", $a); $a = trim($a); return $a; }!
  • 19. Outras funções úteis na filtragem/validação pesquisa de padrões • preg_match($padrao_a_procurar, $string_alvo_da_procura); • preg_match("/@ua.pt/i",$f); • preg_match("/^(?!d+$|[a-z]+$|.*[W_])/i",$g); • http://www.phpf1.com/tutorial/php-regular-expression.html • http://weblogtoolscollection.com/regex/regex.php • ctype_alnum($string); -> valida caracteres alfanuméricos • ctype_alpha($string); -> validação de caracteres alfabéticos • ctype_digit($string); -> valida caracteres numéricos
  • 20. Codificação de passwords Armazenar na BD as passwords codificadas! • MD5 (128bits) • $pwd_codif = md5($pwd); • SHA1 (160bits) ou hash() • $pwd_codif = sha1($pwd); • BASE64 • $pwd_codif = base64_encode($pwd); • $pwd = base64_decode($pwd_codif); • hash(...) e crypt(...) • permitem escolher o tipo de codificação • o crypt() permite adicionar uma string de SALT
  • 21. XSS - Cross Site Scripting Introdução de código (normalmente JS) em áreas de User Generated Content (blogues, fóruns, comments, etc.) • não é um ataque direto ao site, mas sim ao utilizador… • diferenças entre browsers! • Exemplo 1 • Input: <script language="javascript"> document.location="http:// www.ua.pt"; </script> echo $_POST['campo1']; //vai redirecionar • Exemplo 2 • Input: <script language="javascript"> document.location="http:// www.ua.pt"; </script> echo strip_tags($_POST['campo1']); //não redireciona echo htmlentities($_POST['campo1']); //não redireciona