PHP: Programando com segurança

 :: Programando :: PHP

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

PHP: Programando com segurança

Mensagem por Bruno Cavalcante em Ter 2 Ago - 8:30



PHP: Programando com segurança

Este documento tem com ênfase a programação com o mínimo de segurança aceitável para um sistema.


Este documento tem com ê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 tenha esta preocupação na construção do código. Ou seja segurança não é apenas um "coisa" de rede ou de administrador de sistema, mais também uma "coisa" de programador.

Vamos ver aqui alguns exemplos simples de códigos inseguros que podem comprometer todo um sistema.

1) (Cross site script) regra Numero um, nunca passe dados importantes via GET

Exemplo. Uma pagina que usa templates onde o link para o template é passado via GET.
[Você precisa estar registrado e conectado para ver este link.]

Isto poderia gerar um grande transtorno pois a pessoa poderia passar qualquer endereço acima, o que poderia fazer por exemplo, que esta pagina funcionaria como um site pornô.

2) (tratamento de dados) regra numero dois, sempre que passar um dado via GET tratar esse dado usando REGEX ou qualquer tipo de mascara, para ter certeza do tipo de dado recebido.

[Você precisa estar registrado e conectado para ver este link.]
$cod = int($_GET['cod']);
//isto já transformaria qualquer dado para inteiro

3) (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.

4) (tipo de dados) Quarta regra: Sempre verificar e indicar a origem da variavel.

Exemplo:

$cod = $_GET['cod'] //tipo get
$cod = $_POST['cod'] //tipo post
$cod = $_SESSION['cod'] //tipo session
$cod = $_COOKIE['cod'] //tipo cookie

já que por padrão as versões superiores a 4.2 trazem a variável global desabilitada

5) restrição de html htmlspecialchars.

Exemplo: um formulário padrão com campos abertos como de observação onde o usuário poderia colocar no lugar de simples texto um código html comum, um link de foto ou até um javascript malicioso.

Para impedir isso existe um tratamento importante com a função htmlspecialchars() (ver documentação do php) que transforma códigos html em simples códigos texto.

Obs. Teremos uma classe de validação de formulários com um método com esta função seu uso será descrito na documentação da classe.

6) Gravar arquivos via upload. Sempre que for gravar um arquivo via upload tenha certeza do tipo de arquivo que está gravando. Por exemplo um arquivo de imagem pode ser simplesmente tratado usando uma validacão de tipos.

Exemplo:

function type_up()
{//Verifica se o mime-type do arquivo de imagem
if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $this->arquivo["type"])){
return 0;
}else{
return 1;
}
}

Obs: também teremos uma classe sobre upload que teria um metodo de tratamento de tipos com sua documentação de uso.

Com isso não seria gravado outro tipo de arquivo que não uma imagem.

Poderíamos citar N outros casos de invasão ou insegura de um sistema. Por isso acredito que esta documentação estará sempre aberta. Porém o mais importante é ter a consciência de projetarmos desde o inicio o sistema pensado sempre na responsabilidade de termos SEGURANÇA.

cheers

__________________________________________

_____________Programação em Foco____________

_________________Seu Fórum__________________


Bruno Cavalcante
Acesse: [Você precisa estar registrado e conectado para ver este link.]
avatar
Bruno Cavalcante
Turma 20.911

Mensagens : 89
Reputação : -1
Data de inscrição : 30/03/2011
Localização : DF

http://www.kavalcanty.blogspot.com/

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 :: Programando :: PHP

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum