Caderno de Estudos Tecnológicos DESENVOLVIMENTO SEGURO COM BANCO DE DADOS RELACIONAL E STORED PROCEDURE NO AMBIENTE WEB UTILIZANDO MYSQL E PHP Fulvio F. Neto1, Luis A. da Silva1, Matheus M. Pereira1, Rafael B. Felício1 1 Faculdade de Tecnologia (FATEC) – Bauru, SP - Brasil {fulvio.neto, matheus.pereira, luis.silva51, rafael.felicio} @fatec.sp.gov.br Abstract. This article presents a study of vulnerabilities related to SQL injection in MYSQL database systems developed in PHP and ways to prevent them. The methodology consists of building an unsafe environment, susceptible to attacks and other safe, armored with security checks. Where simple actions in the database can solve the problem of such vulnerabilities and thus inhibit malicious attacks. Resumo. Este artigo apresenta um estudo sobre as vulnerabilidades relacionadas à injeção de SQL em banco de dados MYSQL em sistemas desenvolvidos em PHP e as maneiras de preveni-las. A metodologia adotada consiste na construção de um ambiente inseguro, passível de ataques e outro ambiente seguro, blindado com verificações de segurança. Onde ações simples no banco de dados podem sanar o problema de tais vulnerabilidades e dessa forma inibir ataques maliciosos. 1. Introdução Faculdade de Tecnologia de Bauru volume 01 – número 01 – julho/2013 Página Dessa forma, é importante levantar ações que podem ser aplicadas ao banco de dados, no caso o MYSQL, para evitar os ataques do tipo SQL Injection. 48 A internet tem se popularizado muito nos últimos anos, e o acesso a sistemas de informação através da internet não é mais exclusividade de ambientes acadêmicos e governamentais, tornando-se presente no cotidiano do público em geral. Ações comuns como troca de mensagens (e-mails, bate-papo, redes sociais, entre outras), pagamento de contas ou mesmo consultas a bibliotecas, são hoje atividades predominantemente realizadas através de sistemas web. Os sistemas de informação implementados para acesso via internet, desenvolvidos em Hypertext Preprocessor (PHP) com base de dados em MYSQL, sem preocupação com a segurança das transferências das informações, ficam vulneráveis a diversos tipos de ataques maliciosos. A maioria desses ataques é efetuada através da linguagem de acesso a dados Structured Query Language (SQL), denominados de SQL Injections . Este tipo de ataque é resultado da necessidade da construção dinâmica de consultas dentro da linguagem de programação para consultar os dados destes sistemas, somada a práticas inseguras no desenvolvimento de um banco de dados. Caderno de Estudos Tecnológicos 1.1 O sistema gerenciador de banco de dados MYSQL Hoje em dia existem diversos tipos de banco de dados utilizados com diferentes tipos de linguagem de programação em diferentes tipos de servidores e computadores, porém é possível perceber através de pesquisas e estudos, que o sistema gerenciador de banco de dados (SGBD) MYSQL é o mais utilizado no desenvolvimento de aplicações web, por apresentar características que facilitam o desenvolvimento dos sistemas e administração dos dados. [Infoescola 2013] O fato de não precisar, muitas vezes, de um servidor ou máquinas potentes para sua utilização também faz com que o MYSQL seja um dos SGBD mais utilizados no mundo. Conforme Souza (2008) e Pires (2009), o MYSQL funciona muito bem em aplicações web, além de possuir desempenho em média 30% superior do que seus concorrentes como Firebird e PostgreeSQL entre outros. É multiplataforma, ou seja, pode ser instalado em vários sistemas operacionais diferentes. Pelo fato de ser o SGBD mais utilizado em aplicações web, acaba sendo um dos mais visados a ataques de usuários maliciosos. 1.2 A linguagem SQL SQL é a linguagem padrão para manipulação de dados em uma base de dados relacionais, possui algumas palavras chaves para consultar, atualizar, inserir e remover dados de uma base de dados relacional. Segundo SQL Tutorial (2013) são elas: a) SELECT: para consultar (selecionar) informações de um banco de dados; b) INSERT: para inserir informações em um banco de dados; c) UPDATE: para atualizar informações em um banco de dados; d) DELETE: para remover informações em um banco de dados. Os ataques por SQL Injection se utilizam das construções desses comandos SQL para adicionar adendos aos mesmos para, dessa forma, realizarem operações indevidas nos sistemas. Principalmente através das cláusulas UNION ALL, ORDER BY, e a função @@version. 1.3 A linguagem PHP Faculdade de Tecnologia de Bauru volume 01 – número 01 – julho/2013 Página Além de ser uma linguagem de programação gratuita é multiplataforma, ou seja, capaz de ser executada em vários sistemas operacionais, diferente da maioria de suas concorrentes, dessa forma se uma empresa necessitasse mudar o sistema operacional que trabalha, não necessitaria de uma migração de linguagem também, apenas passar seus scripts PHP de uma maquina para a outra. A linguagem PHP possui elementos de outras linguagens, como Perl, Java e C, linguagens estas que costumam ser conhecidas pelos programadores web, o que facilita a curva de aprendizado. 49 Segundo o PHP Manual (2013), PHP é uma linguagem de programação de uso livre, estando sob a licença Open Source License certificada pela Open Source Initiative e possui uma curva de desenvolvimento muito rápida. É utilizada por mais de 20 milhões de domínios da internet, e está presente em mais de 50% das instalações do servidor web Apache. Entre os domínios citados se encontram: o sistema de aprendizado Moodle, a rede social Facebook e o agregador de notícias Digg. Caderno de Estudos Tecnológicos O PHP Manual (2013) informa que a linguagem possui instruções nativas para interação com o banco de dados MYSQL em maior quantidade que as disponíveis para outros sistemas gerenciadores de banco de dados (SGBD). Como alguns exemplos: Mysql_connect() – Abre uma conexão com um servidor MYSQL Mysql_fetch_array() – Obtém uma linha do resultado como uma matriz associativa Mysql_db_query() – Envia uma consulta MYSQL Essa facilidade de interação entre a linguagem de programação PHP e o SGBD MYSQL e de ambos com o servidor web Apache tem feito esse ser o ambiente mais utilizado em sistemas web e ao mesmo tempo, visado quanto aos ataques de SQL Injection. 1.4 A vulnerabilidade em sistemas web Conforme Farias (2009), aplicações web são construídas a partir de diversas tecnologias, tipicamente com um servidor de banco de dados, um servidor web e uma ou mais linguagens de programação, todos os quais podem ser executados em um ou mais sistemas operacionais, ao mesmo tempo ou não. Existem cada vez mais mecanismos desenvolvidos por profissionais de segurança da informação para prevenir ataques, como politicas de acesso aos dados, correções rápidas de falhas através de patches, algoritmos de criptografia, entre outros tantos, porém em contrapartida, isso faz com que o foco dos atacantes seja migrado para onde não caibam restrições e bloqueios, ou seja, as interfaces públicas dos sistemas sejam elas quaisquer formas de entrada de dados e interação do usuário. Por negligência em relação às boas praticas de programação relacionadas à segurança, estes sistemas ficam vulneráveis a ataques, entre eles o SQL Injection Attack (SQLIA) ou Ataque por Injeção de SQL que consiste na inserção de códigos ou instruções SQL dentro de uma consulta (query) através da manipulação de entrada de dados de uma aplicação. A base de dados e a aplicação devem ser protegidas para não sofrerem danos por conta dessas instruções maliciosas. Para que seja possível o desenvolvimento seguro das aplicações e bancos de dados, se faz necessário entender como estas instruções são elaboradas. Segundo Halfond (2006), SQLIA´s acontecem, neste caso, manipulando devidamente a entrada de dados do sistema web. Um sistema web pode ler a entrada do usuário de diversas formas distintas, tendo como base o ambiente que o aplicativo foi implantado. Na maioria dos casos, o SQLIA vem nos envios de formulários que são enviados para o sistema web através de HTTP GET ou POST. Os sistemas web acessam os dados de entrada do usuário como acessam qualquer outra variável do ambiente. Faculdade de Tecnologia de Bauru volume 01 – número 01 – julho/2013 Página É possível, através de testes relativamente simples, identificar vulnerabilidades de sistemas hospedados na web, onde após essa verificação é possível identificar a possibilidade de duas formas de ataque de injeção: O Injection via formulário (preenchimento dos campos usuário e senha com códigos maliciosos) ou Injection via URL (códigos maliciosos inseridos na URL da página acessada). 50 2 Ataques Caderno de Estudos Tecnológicos Ao inserir os códigos via formulário, o invasor tem acesso à área restrita da página como administrador (geralmente o usuário administrador é o primeiro usuário da tabela de usuários do banco de dados do site e possui todas as permissões). Ao acessar como o sistema como administrador, o invasor tem acesso a dados sigilosos, sendo assim, o mesmo pode se utilizar desses dados da maneira que desejar. Caso a invasão seja por URL o invasor utiliza códigos maliciosos na URL de acesso ao sistema para descobrir informações contidas na base de dados, dessa maneira, conseguindo tanto descobrir dados sigilosos de usuários como também destruir tabelas ou dados importantes. Ao descobrir dados, como usuários e senhas de acesso, é possível acessar o sistema como administrador e alterar, apagar ou roubar informações importantes. 3 Protótipo para experimentação O protótipo foi desenvolvido na linguagem de programação PHP para demonstrar as funcionalidades, vulnerabilidade e prevenções decorrentes do desenvolvimento de um sistema web, no protótipo será observado como é possível manipular dados e retornar informações do banco de dados MYSQL através de códigos maliciosos de injeção de SQL que serão executados a partir de formulários e Uniform Resource Locator (URL). Na experimentação será apresentado o funcionamento do sistema e suas vulnerabilidades, e posteriormente as prevenções adequadas para proteção da base de dados. 3.1 Vulnerabilidades em validação de credenciamento de usuários Uma das partes integrantes de um sistema é o controle de acesso através de identificação de credenciais de usuários para a utilização do sistema. Este acesso é feito pela inserção de dados em um formulário de entrada de dados, onde posteriormente será feita a conferencia dos dados fornecidos para que aconteça a liberação do acesso ao sistema ou não. Este formulário é basicamente composto por um campo de texto de usuário, um de senha e um botão. Faculdade de Tecnologia de Bauru volume 01 – número 01 – julho/2013 Página A Figura 1 mostra a tela de entrada de dados, que é responsável pelo credenciamento do usuário. Nesta tela é possível considerar como formulário o conjunto de rótulos, caixas de texto e botões. Os rótulos são responsáveis por identificar as caixas de textos, que por finalidade recebem os dados que serão processados posteriormente, o botão é responsável pela ação, também chamada de evento, onde será executada a chamada do código que será responsável por processar os dados inseridos nas caixas de textos e validá-las como verdadeiro ou falso, liberando assim o acesso do usuário solicitante ao sistema. 51 Figura 1: Formulário de entrada de dados para login no protótipo de experimentação. Caderno de Estudos Tecnológicos O código de programação a seguir demonstra o processamento dos dados para a permissão de acesso do usuário solicitante. Codigo: Login.php <?php //importação do arquivo responsavel pela conexão com o SGBD include("conectar.php"); //Comando $_POST recebe os dados inseridos nas caixas de textos $login = $_POST['txtLogin']; $senha = $_POST['txtSenha']; //Consulta ao banco de dados para validar os dados processados $query = mysql_query("SELECT * FROM Usuario '".$login."' AND usu_senha = '".$senha."';"); WHERE usu_login = //verificar se o resultado da query foi encontrado $resultQuery = mysql_fetch_array($query); //Se for encontrado o resultado na tabela, retorna verdadeiro e aceita a entrada do usuário. if(mysql_num_rows($query) >= 1){ echo "<center><h1>VOCÊ ESTÁ LOGADO!</h1></center><br />"; echo"<center><h3>Usuario:<b>".$resultQuery['usu_nome']."</b>< /h3></center>"; echo "<br /><br />"; echo "<center><a href=\"listarProdutos.php\"> Clique para entrar na página de produtos</a></center>"; //se falso, aparece mensagem de erro e a entrada não é permitida. }else{ echo "ERRO AO TENTAR LOGAR"; } ?> Usuario WHERE Faculdade de Tecnologia de Bauru usu_login = '".$login."' AND usu_senha= Página SELECT * FROM '".$senha."'; 52 O momento de validação dos dados que estão em processamento no código referese a consulta SQL que está embutida no código: volume 01 – número 01 – julho/2013 Caderno de Estudos Tecnológicos Nesta consulta ao banco de dados MYSQL, é solicitada a seleção do registro da tabela Usuario onde o campo usu_login seja igual à variável PHP $login, que é inserida na caixa de texto Usuario da tela representada pela Figura 1, e o campo usu_senha seja igual à variável PHP $senha, qual também é inserida na caixa de texto Senha, também representada na Figura 1. Se a consulta SQL retornar um valor válido referente ao registro encontrado na tabela Usuario será permitido o acesso ao sistema, caso contrário será retornado ao usuário uma mensagem de erro e o acesso não será autorizado. Esta consulta SQL embutida no código de processamento dos dados evidencia uma vulnerabilidade do sistema, pois os códigos maliciosos de injeção de SQL podem ser passados diretamente nesta consulta, fazendo com que o próprio sistema se confunda e então permita o acesso, essa permissão pode ser quebrada inserindo o código malicioso “ ' OR 1='1 ” nas caixas de texto usuário e senha. Quando valida-se esses dados no sistema, a consulta SQL fica assim: SELECT * FROM Usuario WHERE usu_login = '' OR 1='1' AND usu_senha = '' OR 1='1'; Esta consulta vai retornar um valor verdadeiro, pois em seu contexto ela busca o registro da tabela Usuario onde o campo usu_login é igual a vazio (usu_login='') ou 1 é igual a 1 (informação verdadeira) e o campo usu_senha é igual a vazio (usu_senha='') ou 1 é igual a 1(informação verdadeira). usu_nome usu_login usu_senha 1 Administrador admin adm147852369 2 Rafael Barbosa rafael Rafa153 3 Matheus Marostiga matheus Ma1990 4 Fulvio Neto fulvio Fulvio789 É possível observar na Tabela 1 os registros retornados através da consulta com o código de injeção de SQL embutido. Ela retornará todos os registros válidos da tabela Usuario, validando apenas o primeiro registro e permitindo assim o acesso ao sistema. Essa falha é considerada grave, pois deixa o acesso ao sistema totalmente vulnerável. Um usuário mal intencionado e com o conhecimento dos códigos maliciosos poderia facilmente Faculdade de Tecnologia de Bauru volume 01 – número 01 – julho/2013 Página usu_id 53 Tabela 1: Registros retornados através da seleção de SQL com códigos maliciosos de injeção de SQL. Caderno de Estudos Tecnológicos acessar o sistema e causar danos ao sistema e a empresa ou organização que rege este sistema, colocando em risco suas informações, dados e patrimônio. 3.2 Agrupamento de comandos SQL via url As diversas formas de invasão estão relacionadas principalmente aos formulários de consulta de dados ou credenciamentos, considerando que possa ter veracidade neste pensamento, é deixado de lado outro fator muito importante para a proteção dos dados e informações, que estão contidas em nossa base de dados relacionada com a aplicação web, são os agrupamentos de comandos SQL via url. A injeção de SQL via url, chamada assim entre os pesquisadores e profissionais da área de tecnologia da informação, é uma prática comum e perigosa. Muitos desenvolvedores esquecem algumas normas de segurança e deixam informações das consultas à base de dados explícitas em suas passagens de parâmetros de uma página para outra por exemplo, ou mesmo quando suas funcionalidades precisam de algum retorno para parametrizar alguma consulta ou processamento. Existem dois métodos para transferência de dados entre os códigos de um sistema web, o GET e o POST. Sabe-se que o GET, apesar de possuir uma vulnerabilidade de segurança é considerado o método padrão por muitas plataformas. [Gilmore 2010] Em uma aplicação web utilizando PHP, os dados transferidos por GET são passados por parâmetros via url com a seguinte representação: http://www.[dominio].com.br/[nome_da_pagina].php?[nome_da_variável]=[valor] O trecho de código após o caractere “?” exibe uma variável com seu valor, isso significa que o valor que foi consultado na base de dados está explicito na URL, então a partir desse ponto vulnerável, podemos retornar informações e dados da base de dados com o agrupamento de comandos SQL. Considerando a seguinte URL, que se refere a uma página que é responsável por exibir os detalhes de um produto: http://www.siteteste.com.br/detalhes.php?prod_id = 1 Este sistema web provavelmente terá um código PHP que receberá um valor em uma variável, como o seguinte: $id = $_GET[‘id’]; Esse valor será passado para outra variável, nesta estará contido o código que será responsável pela consulta SQL, como: Faculdade de Tecnologia de Bauru volume 01 – número 01 – julho/2013 Página A variável $query recebe o retorno do evento PHP mysql_query(), o qual é responsável por executar a consulta no MYSQL. A consulta sugere que sejam selecionados todos os registros na tabela produto onde os produtos com prod_id sejam iguais ao valor da variável $id. Essa consulta está sendo executada de forma explícita no código, expondo a vulnerabilidade do sistema e o risco da base de dados, sendo assim a porta para códigos de injeção de SQL. Com um simples teste, é feita a verificação da aceitação desses códigos. 54 $query = mysql_query(“SELECT * FROM produto WHERE prod_id = ‘$id’”); Caderno de Estudos Tecnológicos http://www.siteteste.com.br/detalhes.php?prod_id = 1’ Se forem inseridas ‘(aspas simples) no final da url e a página retornar um erro dizendo: “You have an error on your SQL syntax; check the manual that corresponds to your MYSQL server version for the…”, significa que este sistema web está vulnerável, sendo assim, segue uma série de verificações para retornar informações sobre a base de dados. 3.3 Comandos de injeção de SQL e retornos Não existem comandos especiais que caracterizam a injeção de SQL, esse ataque é feito utilizando comandos SQL de acordo com as informações que deseja retornar na consulta, quebrando, dessa forma, bloqueios que supostamente impediriam o roubo de dados, uso indevido do sistema e até mesmo danos à base de dados. 3.3.1 Verificando a quantidade de colunas de uma tabela Considerando a url discutida em tópicos anteriores, será agrupado um comando para verificação da quantidade de colunas existentes na tabela. Para isso será utilizado a cláusula SQL chamada ORDER BY. Quando é necessário classificar os resultados retornados em uma consulta SQL, a cláusula ORDER BY é utilizada, assim é possível especificar qualquer número de colunas. [Hotek 2010] http://www.siteteste.com.br/detalhes.php?prod_id = 1’ORDER BY 1,2,3,4(...). Deve-se agrupar as colunas na cláusula ORDER BY testando de 1 até n , sendo que, quando em n ocorrer um erro, tem-se a informação que n-1 se refere ao numero de colunas da tabela consultada, no caso se no número 5 acontecer o erro, 4 será o valor correspondente ao número de colunas que podem ser usadas para os demais comandos. 3.3.2 Visualizando os dados com a função UNION Este é um ponto considerável, pois a partir da função UNION os ataques são eficazes o suficiente para retornar dados, conforme o protótipo, é possível então retornar o conjunto de informações da base de dados com o seguinte código: http://www.siteteste.com.br/detalhes.php?prod_id =1 UNION ALL SELECT 1,2,3,4 http://www.siteteste.com.br/detalhes.php?prod_id =1 UNION ALL SELECT 1, 2, 3, @@version Faculdade de Tecnologia de Bauru volume 01 – número 01 – julho/2013 Página Conforme acontece com as linguagens de programação e softwares, com o lançamento de novas versões, existem as melhorias e também algumas mudanças de sintaxe, instâncias, etc. Com isso o comando @@version é capaz de informar a versão do sistema gerenciador de banco de dados (SGBD), para assim usar a sintaxe correta para a versão em uso no sistema web. 55 3.3.3 Descobrindo a versão do SGBD MySQL Caderno de Estudos Tecnológicos 3.3.4 Obtendo o nome dos schemas, tabelas e colunas http://www.siteteste.com.br/detalhes.php?prod_id column_name from information_schema.columns— =1 UNION ALL SELECT 1, 2, 3, O comando acima tem como finalidade retornar o nome das colunas e tabelas do schema principal do banco. Uma vez que os privilégios de usuários não são configurados corretamente, o invasor conseguirá retornar os nomes de tabelas e colunas e assim fazer a seleção dos dados que precisará para prosseguir com o SQL Injection. Para que finalmente sejam retornados os dados necessários para acesso ao sistema web e também alterações na base de dados, o invasor fará uma nova sequencia de comandos, onde poderá então obter nomes de usuários, senhas e informações de outras tabelas que compõem o schema que está sendo atacado. Para retornar dados da tabela usuário, como exemplo, utilizam-se os próximos códigos, e com sucesso, o invasor conseguirá manipular o sistema web e a base de dados, com livre acesso e más intenções. http://www.siteteste.com.br/detalhes.php?prod_id =1 UNION ALL SELECT 1, 2, 3, column_name from information_schema.column WHERE table_name=’usuario’— http://www.siteteste.com.br/detalhes.php?prod_id concat(username,0x3a,password)from admin/* =1 UNION ALL SELECT 1, 2, 3, http://www.siteteste.com.br/detalhes.php?prod_id=1/**/union/**/all/**/select/**/0x 31,concat_ws(0x3a,username,password),0x33/**/from/**/users-- 4 Desenvolvimento seguro No item 3 foi apresentada uma análise das possíveis vulnerabilidades de injeções, mostrando possíveis danos que podem ser gerados por essas falhas. A partir do conhecimento adquirido com a experimentação e os estudos sobre injeção de SQL, serão apresentadas formas de prevenção de injeção de SQL. DELIMITER $$ Faculdade de Tecnologia de Bauru volume 01 – número 01 – julho/2013 Página Como a porta de entrada para a injeção de SQL são os blocos de código SQL gerados dinamicamente e que possuem a instrução SELECT, é possível utilizar o objeto chamado Procedimentos Armazenados (STORED PROCEDURES) a partir da versão 5.0 do MYSQL, para montar um bloco de código onde serão definidas as variáveis de entrada, o processamento da consulta e o retorno de dados e informações da base de dados. O que torna esse objeto seguro é que ele permite fazer o tratamento dos dados de entrada no processamento da consulta. Para isso foi criada a STORED PROCEDURE da seguinte forma: 56 Definida a modelagem do banco de dados, é possível começar a criação da base de dados e seus objetos, e nessa etapa do desenvolvimento são aplicadas algumas medidas de segurança. Nesse primeiro momento são efetuadas as configurações da base de dados, como relacionar a base a um ou mais usuários do SGBD, e a política de permissões para esses usuários. Com essas políticas, configuradas com os comandos GRANT, utilizado para conceder privilégios, e REVOKE, utilizado para revogar privilégios, por exemplo, é possível garantir quais usuários terão acesso a executar qualquer comando além do SELECT. Caderno de Estudos Tecnológicos USE `tcc_fechado`$$ DROP PROCEDURE IF EXISTS `TCC_Usuario_SELECT`$$ CREATE DEFINER=`root`@`localhost` PROCEDURE `TCC_Usuario_SELECT`(IN v_login VARCHAR(60), v_senha VARCHAR(60) ) BEGIN SELECT usu_login, usu_senha, usu_nome FROM usuario WHERE (usu_login = REPLACE(v_login,'\'','')) AND (usu_senha = REPLACE(v_senha,'\'','')); END$$ DELIMITER ; É possível observar que existe uma consulta simples dentro de um objeto de banco de dados, onde na cláusula WHERE foi utilizada uma função chamada REPLACE. REPLACE([variável], ‘[caractere]’,’[caractere substituto]’) O comando REPLACE utilizado na STORED PROCEDURE substitui aspas simples por um caractere em branco, nesse caso, a tentativa de concatenar um código malicioso na consulta será frustrada, pois todas as aspas simples necessárias para a consulta serão substituídas e, assim, o retorno será uma mensagem de erro. Quando é utilizada a política de segurança de inserir todas as consultas em STORED PROCEDURES, a execução é limitada ao objeto do banco de dados, ou seja, não existe consulta direta a base de dados por parte do sistema web. No código abaixo as informações desejadas são buscadas utilizando uma consulta direta, não há nenhum objeto entre a consulta e a base de dados, onde é possível enxergar os pontos de vulnerabilidade. CALL TCC_Usuario_SELECT('".$login."','".$senha."') Faculdade de Tecnologia de Bauru volume 01 – número 01 – julho/2013 Página Quando se utiliza um objeto para a consulta, neste caso uma STORED PROCEDURE, é criado um filtro entre a consulta e a base de dados. Como observado, na estrutura da STORED PROCEDURE, existe a consulta, porém a codificação dela não é explícita no código do sistema web e, sim, uma chamada ao objeto passando para ele valores das variáveis de entrada: 57 SELECT * FROM Usuario WHERE usu_login = '".$login."' AND usu_senha = '".$senha."'; Caderno de Estudos Tecnológicos Utilizando este artifício, tanto os ataques via formulários de credenciamentos como também via URL são prevenidos, protegendo assim a base de dados e as informações. 5 Conclusão Não é necessário exercitar uma política radical e extremamente complexa de segurança no desenvolvimento do banco de dados e seu acesso pelo sistema web. Simples ações, como a criação de uma STORED PROCEDURE com tratamento dos dados de entrada, políticas básicas de acesso dos usuários aos dados, entre outros itens simples, podem blindar uma aplicação e uma base de dados, garantindo assim a segurança das informações e dos dados. 6 Referências Beighley, L. Use a Cabeça: SQL. Rio de Janeiro: Alta Books, 2010. Canto, F. C. (2001) “Vulnerabilidades da Linguagem PHP”. Universidade Federal do Rio Grande do Sul, Porto Alegre. Farias, M. B.(2009) “Injeção de SQL em aplicações Web: causas e prevenção” Graduação em Ciência da Computação – Universidade Federal do Rio Grande do Sul, Porto Alegre. Gilmore,W. J. (2010) “Dominando PHP e MYSQL: Do Iniciante ao Profissional”. Rio de Janeiro: Alta Books. Halfond, W. G. F., Viegas, J. e Orso, A. (2006) “A Classification of SQL Injection Attacks and Countermeasures”. – College of Computing – Georgia Institute of Technology, Atlanta. Hotek, M. (2010) “Microsoft SQL Server 2008 – Passo a Passo. Bookman. Infoescola - MySQL – Acesso em 2013. http://www.infoescola.com/informatica/mysql/. PHP Manual – Acesso em 2013. http://www.php.net/manual/pt_BR/index.php Pires, C. E. S., Nascimento, R. O., Salgado, A. C. (2009) “Comparativo de Desempenho entre Bancos de Dados de Código Aberto”. – Centro de Informática – Universidade Federal de Pernambuco (UFPE), Recife. SQL Tutorial – Acesso em 2013. http://www.w3schools.com/sql/default.asp. Página 58 Souza, M. O., Matioski, M. E. e Neves, L. A. P. (2008) Análise de desempenho dos bancos de dados MYSQL, PostgreSQL e Firebird: Um Estudo de Caso. Em Revista Cientifica de Administração, páginas 7 – 22. Editora Gráfica Expoente. Faculdade de Tecnologia de Bauru volume 01 – número 01 – julho/2013