Segurança - O que você pensa?

Bem, esse é o primeiro artigo que escrevo, mais tenho estudado sobre segurança, por isso decidi publicar um artigo falando sobre o assunto. SQL e PHP Injection, são só alguns fantasmas da segurança na hora de finalizar um projeto.

Começo fazendo referência a um dos sites que vem me ajudando infinitamente na busca por informações, que parecem ser totalmente "ingratas", já que quando você aprende como previnir uma falha de segurança, "eles" arrumam outra novinha em folha. O site é o www.invasao.com.br . Vale apena.

Voltando ao assunto da "praga" que quando descobrimos a vacina, ela já descobriu outra maneira de nos atingir; nada no mundo tecnológico está livre de "sabotagem" ou manipulações externas. Há não muito tempo, tínhamos um celular que parecia uma esteira de academia, mais ele fincionava perfeitamente até a hora que você não o quisesse mais - eles nunca quebravam; digo NUNCA - ou então que a água os danificassem. Hoje nossos celulares estão expostos a vírus que podem ser transmitidos através de uma falha de segurança do Bluetooth ou em algum aplicativo contaminado que você possa ter aberto em seu celular mais moderno ou iPhone.

Nas aplicações WEB não é diferente... um dos principais problemas encontrados por programadores é impedir que Hackers - ou lammers como preferir - injetem informações fazendo que seu sistema funcione de uma maneira inesperada (como excluir tabelas, dados ou até mesmo derrubar o servidor onde o site está hospedado), ou até mesmo levar ao roubo de informações do usuário que trafega em seu site.

Como um exemplo prático, suponhamos que temos o seguinte script para realizar a consulta e a exibição de um resultado na tela para o usuário:

<?php
include "v_session.php";
include "conec_banco.php";

$query = $_GET["q"];

$sql = mysql_query("SELECT * FROM Busca WHERE ID = "$userid" ");
while($a = mysql_fetch_array($sql)) {
$nome = $a["Nome"]
}
echo"Sua busca por $query ";

echo"$nome";

?>

Uma consulta comum, se não fosse o descuido na hora de receber a informação via GET sem validar os dados que entraram no sistema através dela.
Todos sabemos que via GET os valores ficam expostos na URL:
Exemplo: http://www.seusite.com.br/busca.php?q=busca

Suponhamos que um espertinho resolva injetar um código como esse no campo "q" <script>javascript:history.back();</script> . Esse código só vai voltar a página de resultados em um passo no navegador, mais imagine se no lugar desse código o camarada resolve injetar um código para roubar cookies do usuário que executar a URL com esse código.

Por isso o princípio da segurança é validar sempre os valores que entram em sua página. Coisas piores poderiam ser feitas através dessa falha que pode parecer inofenciva, mais põe todo o seu sistema em perigo.

Uma opção para esse caso seria usar uma função anti-sql.

<?
function anti_injection($sql)
{
$sql = preg_replace(sql_regcase("/( | |%0a|%0d|Content-Type:|bcc:|to:|cc:|Autoreply:|from|select|insert|delete|where|drop table|show tables|#|*|--|)/"),"",$sql); // aqui eliminamos qualquer valor suspeito de SQL-injection que a variavel possa conter.
$sql = trim($sql);
$sql = strip_tags($sql); // removemos as tags HTML, evitando ataques como o citado acima
$sql = addslashes($sql); // adicionamos barras "/" antes e depois dos valores contidos nas variáveis.
return $sql;
}
?>

Lembrando que essa função não é  impenetrável e tão pouco imburlável, mais é um princípio.
Espero que o artigo seja de proveito de todos. Segurança nunca é demais - nunca mesmo.

Back to Top