PHP: Programando com segurança

Este documento tem como ênfase a programação com o mínimo de segurança aceitável para um sistema. Quando falamos de segurança, temos que ter noção que um projeto já deve nascer com esta preocupação. Que os programadores deste projeto também tenham esta preocupação na construção do código.

[ Hits: 44.432 ]

Por: leo genilhu em 03/03/2006


Tratamento de dados e SQL injection



Tratamento de dados


Regra número dois, sempre que passar um dado via GET, tratar esse dado usando REGEX ou qualquer tipo de máscara para ter certeza do tipo de dado recebido.

Exemplo:

http://exemplo.com.br/exemplo.php?cod=123

$cod = int($_GET['cod']);
//isto já transformaria qualquer dado para inteiro

SQL injection


Esta regra é comumente usada por programadores desatentos. Nunca passe dados de um formulário direto para um query. Exemplo:

Código HTML:

<input type=text name=login>
<input type=password name=senha>

Código PHP:

<?php
$sql = "SELECT * FROM users WHERE user=$login AND pass=$senha";
?>

Ou seja, as variáveis $login e $senha chegam direto no banco de dados sem nenhum tratamento ou o que pode acontecer.

Se o usuário digitar no login ou na senha OR "1=1", ou seja:

$user = a nada OR 1=1 -->passou
$senha = a nada OR 1=1 -->passou

e pode-se fazer muito mais....

Uma simples validação de senha e login evitaria isso, sendo este tipo de invasão muito comum e de responsabilidade do programador, não do servidor de hospedagem.

Página anterior     Próxima página

Páginas do artigo
   1. PHP: Programando com segurança
   2. Tratamento de dados e SQL injection
   3. Tipo de dados e restrição de HTML htmlspecialchars
   4. Gravar arquivos via upload
Outros artigos deste autor

Fazendo sua conexão remota por SSH mais segura

Segurança: Autenticando o PHP com HTTP (Authentication Required)

Sistema de identificação em rede (NIS)

Criando backup do MySQL com o mysqldump

Leitura recomendada

Segurança em PHP

Introdução a manipulação de erros em PHP

XSS - Um exemplo de ataque

Criptografia do método GET no PHP

Pentesting on PHP apps: XSS

  
Comentários
[1] Comentário enviado por profeta_livre em 03/03/2006 - 13:04h

só uma dúvida, se eu enviar um dado não seria melhor eu receber como a varialvel dele?

em vez de receber assim $_POST['variavel']
não seri amais prudente receber assim $variavel
?

[2] Comentário enviado por makoto_mizuno em 03/03/2006 - 13:11h

profeta_livre, assim como ele falou no artigo, a opção "global vars" do PHP pode estar desabilitada e mesmo que estivesse habilitada o preferível é assim pois se mudar algum dia a configuração você não terá problemas e também tem a questão de você querer que o usuário use POST e não tente enviar por GET para driblar qquer verificação ou limitação que vc impôs, há várias coisas para citar.

[3] Comentário enviado por chronos em 03/03/2006 - 13:59h

certeza, evitar register globals é a melhor coisa a se fazer, é muito inseguro.

Principalmente para sites que deixam as variaveis via get, sendo mostradas.

Meu caro leogenilhu, um bom artigo para começar, seria interessante postar links de artigos sobre segurança PHP, é muito importante para a galera que ta começando e para quem já sabe.

[4] Comentário enviado por pezt em 03/03/2006 - 14:01h

ficou bom o artigo, mas não completo.
você colocou exemplos de códigos errados e tal.. mas e os códigos certos? tudo bem, é possível procurar e tal.. mas como eu disse.. não está completo.
mas não se engane.. seu artigo não está ruim.. pelo contrário.. está muito bom..

parabens


[5] Comentário enviado por paes em 03/03/2006 - 14:45h

O certo ele ja falou no próprio texto, o que se deve fazer.

E não há apenas códigos errados, há os certos também, como a verificação do arquivo, da verificação da origem e do tratamento de dados. Esses são códigos corretos!

Até

[6] Comentário enviado por removido em 03/03/2006 - 21:44h

O artigo está legal, mas não concordo em parte!

Sob o ponto de vista da segurança, não há problema algum em enviar informações pela URL. Pode-se enviar dados com POST tanto quanto por GET, não há nada que impeça o cliente de enviar o que bem entender com POST! Alias, enviar o script a ser carregado pela URL é um vantajoso, pois facilita a organização do "Favoritos". O que impede o seu website de virar um "pornstar" é o tratamento das informações recebidas dos clientes. Um simples "basename" resolve o problema, reduzindo a possibilidade de inclusão aos scripts dos diretórios de inclusão.

Um abraço a todos!

[7] Comentário enviado por ferlopes em 11/03/2006 - 16:43h

Existe um ótimo manual de segurança em PHP, chamado PHP Security: http://phpsec.org/php-security-guide.pdf

Com dicas próximas e complementares às fornecidas pelo Leo

Parabéns pelo artigo!

[8] Comentário enviado por agk em 13/03/2006 - 09:53h

Muito boas as dicas de segurança do artigo, realmente que está começando não se importa muito com a segurança, o importante mesmo é funcionar, mas não deveria ser assim.

[9] Comentário enviado por crackt0r em 14/12/2006 - 02:40h

php é sempre uma dor de cabeça, mais é complicado codar sem ouver um erro, agente faz o script com uma intenção...mais esse tipo de erro é relativo, sempre vai ter...
mais vlw ai por enviar o tuto ;]

[10] Comentário enviado por wpdm em 06/01/2008 - 00:43h

muito bom essas variaveis as vezes me da uma dor de cabeça uhashuuha
flow fuiz

[11] Comentário enviado por Lisandro em 10/07/2009 - 08:28h

Parabéns. muito legal.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts