Atualizado em 26 de Setembro de 2014

Protegendo SQL contra Comandos Maliciosos

Olá pessoal,

Uma grande dica sobre segurança é: Nunca confie em nenhum dado que o usuário enviar. Em resumo esta dica que dizer que devemos validar toda e qualquer informação que o usuário envia para o nosso sistema.

Uma das maiores preocupações que o programador deve ter e com o SQL, pois se um usuário mal intencionado conseguir manipular o SQL ele poderá fazer varias coisas como o nosso sistema, desde: apagar dados, acessar áreas restritas do sistema sem ter o usuário e senha entre outras.

Para Proteger o SQL contra Comandos Maliciosos o PHP trás o comando addslashes que formata as aspas incluindo o caractere barra (/) antes de aspas, fazendo com que o caractere seja interpretado pelo SQL como um caractere especial como o símbolo das aspas.

Veja um exemplo:

<?php
$texto = "Aqui vem um texto com a'spas";

echo addslashes($texto);
//Resultado: Aqui vem um texto com a\'spas
?>

Já que as aspas são um grande problema no SQL, pois são elas que o SQL entende que finaliza um parâmetro e começa outro, basta usar este comando que seu SQL estará protegido.


Gostou do post, continue por dentro das dicas de programação!!! Assine a newsletter.


E isso aí pessoal, até a próxima.

Tags:  Comandos PHP | PHP | SQL

Comentários

Sua foto do perfil

Charles

Boa dica Mauricio

Outras funções que usa são essas

$string = "union all select 1,@@version,3";

$string = strip_tags($string);
// strip_tags = Elimina as etiquetas HTML e PHP de um

// texto e convertê-las em cadeias simples, sem essas
// etiquetas, só com o texto normal.

$string = addslashes($string);
// addslashes = adiciona barra invertida antes de
// alguns caracteres que precisa ser escapados em queries aos bancos de dados

$string = mysql_real_escape_string($string);
// mysql_real_escape_string = Escapa uma string para

// usar em uma consulta MySQL

$string = htmlspecialchars($string);

// htmlspecialchars = converte alguns caracteres

// pré-definidos para entidades HTML Use a função
// htmlspecialchars sempre que precisar visualizar
// esses caracteres no conteúdo da página.

$string = str_replace("union", "****Palavra Bloqueada Pelo Sistema****", $string);

// str_replace modifica/substitue uma parte da string por outra caso
// desejar, normalmente utiliza-se a mesma para fazer substituição de strings.
// Digamos que sua sua string tenha a palavra SENADO e você queira trocar por CAMARA.
// No exemplo acima estou substituindo a palavra union por ****Palavra Bloqueada Pelo Sistema****

$String = filter_var($String, FILTER_SANITIZE_STRING);
//Limpa tags html da string

Espero ter ajudado

15 de Janeiro de 2016 - 16:27

Sua foto do perfil

Mauricio Programador

Boa Charles,

Vou criar posts com estes comandos para ficar mais em evidência.

Obrigado pelo compartilhamento.

18 de Janeiro de 2016 - 16:04

Sua foto do perfil

Charles

Infelizmente nós desenvolvedores PHP (Não só nós mas muitas outras linguagens) sofremos com este mal que é o SQL Injetion, mas nada lhe impede de estudar como estes abestados fazem e você se previnir.

Tem muito site por ai que é barbada de acessar por causa de falta de estudo do desenvolvedor, preguiça e outros motivos mais.

18 de Janeiro de 2016 - 16:08

Sua foto do perfil

Mauricio Programador

Realmente alguns desenvolvedores facilitam o trabalhado de pessoas mal intencionadas pelo simples fato de ter preguiça de estudar.

Ainda mais nessa área que é tão dinâmica.

#estudo ;)

18 de Janeiro de 2016 - 16:08

Sua foto do perfil

Jeferson

Boa tarde Mauricio, quando se usa PDO preciso usar essa técnica ou ela é so válida para códigos sem pdo?

03 de Maio de 2015 - 12:32

Sua foto do perfil

Mauricio Programador

Olá Jeferson,

O PDO já faz esta validação sozinho.

Esta técnica se aplica somente quando não usamos o PDO embora sempre e bom fazer este tipo de validação mesmo usando o PDO.

Abraço.

04 de Maio de 2015 - 10:02

Sua foto do perfil

Amarildo

e se fosse usar o mysql_real_escape_string();, ele também protegeria, ou não?

03 de Janeiro de 2015 - 15:07

Sua foto do perfil

Mauricio Programador

Olá Amarildo,

estaria sim. Vou criar um post sobre esta função.

abraço.

05 de Janeiro de 2015 - 08:58

Sua foto do perfil

Eduardo Silva

Olá, Maurício,
Desculpe a minha ignorância, mas não consegui entender o que as aspas tem a ver com a segurança da SQL... Meu site tem um diretório protegido por senha no servidor, e uma área restrita diferente deste diretório, em que eu valido email e senha do usuário na base de dados para dar-lhe o acesso... não consegui mesmo encaixar o negócio das aspas neste contexto. Poderia ser mais claro?
Obrigado e um abraço,
Eduardo

26 de Setembro de 2014 - 14:35

Sua foto do perfil

Mauricio Programador

Olá Eduardo,

Claro que sim, vou dar um exemplo.

Existe uma técnica conhecida como SQL Inject, ela consiste em usar aspas simples para anular o SQL de validação que verifica se o usuário tem ou não permissão de acesso.

Caso você não use uma proteção no SQL como esta vista no post, através desta técnica posso acessar sua área restrita sem necessariamente ter usuário e senha.

Espero ter sido mais claro agora, qualquer coisa comenta ai.

Abraço.

29 de Setembro de 2014 - 08:40

Sua foto do perfil

Eduardo Silva

Agora sim, eu não sabia desta técnica... sou novato em sql. Obrigado pela dica, vou aplicá-la.
Um abraço,
Eduardo

30 de Setembro de 2014 - 08:46

NEWSLETTER

Receba dicas de programação
em seu e-mail

TWITTER

Acompanhe tudo o que rola
com Mauricio Programador

NEWSLETTER