A Necessidade De Segurança Em Desenvolvimento De Sistema
Por: Matheus Dias • 8/6/2015 • Projeto de pesquisa • 1.157 Palavras (5 Páginas) • 258 Visualizações
[pic 1]
Tecnólogo em análise e desenvolvimento de sistemas
FACULDADE ANHANGUERA DE BELO HORIZONTE
Etapa 1 e 2
Professor Wagner Gomes
Belo Horizonte, 14 de Abril de 2015.
Belo Horizonte
14/04/2015
SUMÁRIO
3. A Necessidade De Segurança Em Desenvolvimento De Sistemas
3. Técnica: Sql Injection – O Que É E Como Evitar.
5. XSS
6. DDOS
6. Roubo de Sessão.
A NECESSIDADE DE SEGURANÇA EM DESENVOLVIMENTO DE SISTEMAS
Um bom sistema não consiste em somente em atender as necessidades do cliente. A informação é um bem precioso para uma instituição. Grande parte da informação pode ser sigilosa para uma instituição e, não é uma boa prática deixa-la em aberto tanto externamente quando internamente, por isso mesmo, existe, por exemplo, sistemas com controle de login e credenciais dos usuários, dizendo quem pode ver o que em um sistema.
Um tipo de usuário tem uma credencial que filtra as informações e restringe o “poder” que o mesmo tem sobre uma informação, isto é, ele só poderá ter acesso a informações que condizem com suas atividades baseadas nas políticas da empresa em que atua.
Um sistema seguro faz com que, todos possam realizar sua rotina de trabalho com as informações cabíveis para fazê-lo e, que nenhuma informação “vaze” para mãos e intenções erradas, que, seja intencionalmente ou acidente, a informação seja excluída, alterada, ou seja, exportada para locais indevidos.
O grande problema é que, não basta somente ter campos que validam login e senha de um usuário. Existem cuidados que devem ser tomados na hora do desenvolvimento destes sistemas para que, por técnicas citadas neste trabalho, qualquer um com o conhecimento destas, burle o sistema por causa de suas vulnerabilidades.
TÉCNICA: SQL INJECTION – O QUE É E COMO EVITAR.
SQL Injection é uma técnica de ataque que consiste em anexar comandos SQL em uma Query (consulta) através de manipulações de entrada de dados de uma aplicação.
Um exemplo prático é um formulário de Login, que solicita ao usuário suas credenciais do sistema, caso o usuário existe e a senha seja condizente com a credencial, a consulta se torna verdadeira/positiva, dando acesso ao sistema.
A consulta SQL neste caso ficaria assim:
Select * from usuario where login = ‘exemploLogin’ and senha= ‘exemploSenha’;
Na consulta acima, se o usuário exemploLogin existir no banco de dados e a senha exemploSenha estiver correta, o sistema aceita o acesso do usuário.
Uma das maneiras de testar se o sistema possui vulnerabilidade para o SQL Injection, é acrescentando uma aspa simples (‘) em um dos campos. Se o desenvolvedor não tratou as entradas possíveis o sistema devolverá um erro contendo informações sobre o banco, informações estas que serão úteis para o atacante. A query abaixo demonstra o erro de sintaxe.
Select * from usuario where login = ‘’’ and senha= ‘’’;
Observação: O banco de dados acusará erro de sintaxe, pois as aspas devem ser pares, ou seja, uma de abertura e outra de fechamento, e no caso acima ficará um número impar de aspas, e é nesta hora que o banco devolverá informações úteis ao atacante caso exista vulnerabilidade.
Utilizando desta técnica, o atacante pode inserir comandos SQL para que o banco valide a consulta, para isto, podemos inserir ‘ OR 1 = 1 tanto no campo de login quanto senha, veja abaixo:
Select * from usuario where login = ‘’ OR 1 = 1 and senha = ‘’ OR 1 = 1;
Observação: As aspas serão fechadas e uma instrução OU é adicionada em ambos os campos, desta forma, a sentença será verdadeira, porque, por mais que não exista o login e senha específicos, a afirmação que 1=1 é verdadeira, ou seja, o campo login e senha são verdadeiros.
Outros comandos também podem ser adicionados, como insert, drop table, select, entre outros, por estes motivos, deve-se ter cuidado para “tratar” as entradas do usuário, assim, mesmo que alguém use estes comandos, o banco tomará ações para evitar que um desastre aconteça com as informações contidas no mesmo.
As melhores práticas para se proteger de ataque SQLInjection conforme a OWASP (Open Web Application Security Project) são:
- Parametrização de consultas.
- Usar “stored procedures”.
- Escapar toda entrada fornecida pelo usuário.
- Limitar privilégios aos acessos.
Segue alguns comandos que evitam o SQL Injection.
Addslashes() – Adiciona uma barra invertida antes de qualquer caractere de escape
$user = addslashes($_POST[user]);
$pass = addslashes($_POST[pass]);
Retorno SQL.
SELECT * FROM users WHERE user = \'\' or 1 = 1 and password = \'\' or 1 = 1
Trim() – Retira os espaços em branco do campo.
$user = trim($_POST[user]);
My_sql_real_escape_string() – Escapa caracteres especiais.
$user = mysql_real_escape_string($_POST[user]);
$pass = mysql_real_escape_string($_POST['pass']);
Strip_tags() – Retira tags html e php dos dados fornecidos.
$user = strip_tags($_POST[user]);
$pass = strip_tags($_POST[pass]);
Observação: Neste comando, pode-se utilizar um parâmetro indicando qual tag tem permissão para continuar, para isto, só adicionar uma virgula e a tag permitida entre aspas. Segue exemplo abaixo:
$user = strip_tags($_POST[user], '');
Intval() – Certifica que receberá somente numero inteiros dos dados fornecidos.
...