/*
Filtro de caracteres especiais para segurança. Stripslashes e mysql_real_escape_string esta função pode ser usada para limpar os dados recuperados de um banco de dados ou de um formulário HTML, geralmente é chamado de escape de dados.*/
Campo nome: Zak's Derick's
Escaped string: Zak\'s and Derick\'s Laptop
Assim o banco de dados vai entender que é um caractere especial, não causando problema ao colocar a aspa simples, evitando o SQL Inject.
// pega e filtra os valores do post
$username = (isset($_POST['username'])) ? trim($_POST['username']) : '';
$username = stripslashes($username);
$username = mysql_real_escape_string($username);
Outra forma seria remover os caracteres especiais criando uma lista negra, geralmente é chamado de black list.
<?php
function anti_injection($sql) {
// Remove palavras suspeitas de injection.
$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"), "", $sql);
//Remove espaços vazios.
$sql = trim($sql);
//Remove tags HTML e PHP.
$sql = strip_tags($sql);
//Adiciona barras invertidas à uma string.
$sql = addslashes($sql);
return $sql;
}
$id = anti_injection($_GET['id']);
?>
Outro mais simples:
http://codigofonte.uol.com.br/codigo/php/seguranca/remover-caracteres-indesejados-e-evitar-a-sql-injection
Outra forma seria permitir somente os dados que eu quero receber, geralmente é chamado de white list.
$input = "' or 1='1"; $input = strip_tags($input); // retirar tags php $output = eregi_replace("[^a-z0-9ã-õá-úà-úãõâ-ûç,.;]", '', $input); echo $output;
Obs: - Não retirar palavras reservadas do SQL: SELECT, UPDATE, etc.
Outro exemplo mais simples:
function checa($string) { $string = preg_match("/^[0-9A-z]*$/i", $string); return $string; }
Dica para os testadores, insira os caracteres abaixo nos campos de entrada,
para analisar o erro que vai gerar.
* \\\\ ' & ¨% $ # ( ) { [ } ] / ^~`´º
Boa leitura:
apresentacaosegurancaphp.pdf
Nenhum comentário:
Postar um comentário