Proteção de Banco de Dados MySQL

Fórum sobre Banco de Dados e RDDs para Clipper/[x]Harbour.

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

O exemplo do Ivanil agora funcionou.
Acho que estou pronto para implantá-lo em meu sistema.
Mas antes preciso ver como seria em php.
Inacio de Carvalho Neto
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 166
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

Proteção de Banco de Dados MySQL

Mensagem por ivanil »

rochinha escreveu:Base64 é uma codificação padronizada. Como não funcionaria no PHP e no Harbour
Caro amigo, não se atenha a apenas parte da mensagem, veja o conteúdo da função.

a conversão para Base64 possivelmente é compatível, mas o amigo cjp quer incluir criptografia e me parece que foi sugerido por você, hb_crypt é harbour, mas uma vez que gera conteúdo binário o encoder se faz necessário para gravação no BD, mas levando isso para o PHP o máximo que tera de volta é o valor binário sem significância, pois depende do decodificador harbour; voltando ao início do problema;

Já que o amigo cjp confirmou que precisa compartilhar o BD, eu indicaria algumas das abaixo, que acredito que talvez tenha compatibilidade já que há um padrão pré-estabelecido e estas nem precisam do encoder.
hb_SHA1( )
hb_HMAC_SHA1( )
hb_HMAC_SHA224( )
hb_HMAC_SHA256( )
hb_HMAC_SHA384( )
hb_HMAC_SHA512( )

Mas só testando para ver...

Grande abraço.
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Proteção de Banco de Dados MySQL

Mensagem por rochinha »

Amiguinhos,

ivanil
Sugeri algumas dicas de criptografia, mas para uso no desktop, com Harbour ou xHarbour.

Não percebi que ele desejaria compartilhar o mesmo dado criptografado no desktop entre o PHP e quando voce disse que a exclusividade da função do Harbour e seu resultado não adiantaria o uso no PHP fiquei curioso se acontece diferença no conteúdo em Base64 é diferente no desktop e no PHP.

Se bem que seja Base64 ou qualquer outro meio de criptografia só serve como segurança no caso de possuir senha pois as função de decodificação simplesmente obterão o resultado.

Vale lembrar que alguns métodos só fazem a criptografia e não o contrário, ou seja, não oferecem meio de decodificação.

Base64 tem codificação e decodificação: Base64_Encode() e Base64_Decode() mas não tem segurança.

Para codificar algo no Harbour e decodificar no PHP e vice versa será necessário funções nestes dois mundos em que o algorítimo seja padrão bcrypt.

Se o Base64 for compativel entre Harbour e PHP, pelo fato de não ter segurança, ainda assim poderá ser usado acrescentando segurança por meio de OpenSSL que existe para ambos ambientes.

Então podemos criptografar com senha usando OpenSSL e depois encapsular com Base64 e para recuperar desencapsular com Base64 e descriptografar com OpenSSL, exemplo:

No PHP podemos usar as funções openssl_encrypt para criptografar e a openssl_decrypt para descriptografar. Elas são mais conhecidas e vamos usar elas paras os nossos exemplos.

Código: Selecionar todos

$string = "meu texto a ser encriptado";
$algoritmo = "AES-256-CBC";
$chave = "minha_chave";
$iv = "wNYtCnelXfOa6uiJ";

$mensagem = openssl_encrypt($string, $algoritmo, $chave, OPENSSL_RAW_DATA, $iv);
echo base64_encode($mensagem); //codificada em base64 para conseguirmos enviá-la em transtornos
//saida da função é "KvMVCrccROwq0+gq1xAqK1lXvNYsFWv7xGgmEPdyCts="
Para mais detalhes sobre a função openssl_encrypt você pode acessar a documentação clicando aqui

Vamos explicar cada parâmetro usado no na função

$string é a mensagem que queremos criptografar
$algoritmo é o algoritmo usado para gerar a mensagem criptografada. Existem diversos algoritmos suportados pela openssl_encrypt e para ver a lista deles acesso o link clicando aqui
OPENSSL_RAW_DATA (opcional) Esta define o tipo de saída da função, neste caso em bytes. Caso não informe essa define o PHP vai disparar um PHP Warning.
$iv (opcional) É o vetor de inicialização, mas podemos chamar ele de salt que usamos nos processos de criptografia com hash. Usamos ele para que o resultado da criptografia seja diferente mesmo que $string seja a mesma. o $iv é um parâmetro de 16 caracteres opcional. Mas o PHP vai disparar um PHP Warning caso você não o informa. E caso você use um você precisa dele também para conseguir descriptografar.
Agora temos no nossa mensagem criptografada basta usarmos a função openssl_decrypt os parâmetros usados são os mesmos da função openssl_encrypt.

Código: Selecionar todos

$mensagem = "KvMVCrccROwq0+gq1xAqK1lXvNYsFWv7xGgmEPdyCts=";
$algoritimo = "AES-256-CBC";
$chave = "minha_chave";
$iv = "wNYtCnelXfOa6uiJ";

$mensagem = openssl_decrypt(base64_decode($mensagem), $algoritimo, $key, OPENSSL_RAW_DATA, $iv);
echo $mensagem; //já que codificamos a mensagem em base64 foi preciso decodificá-la.
//saída da função é "meu texto a ser encriptado"
Para mais detalhes sobre a função openssl_decrypt você pode acessar a documentação clicando aqui

Agora é só implementar estes métodos no Harbour e ter uma conversação mais confiável, transparente e portável.

Fonte:
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

Acho que entendi o conceito, mas ainda não consegui fazer.
Testei o teu exemplo de decriptação, não funcionou.
Por favor, veja onde estou fazendo errado:

Código: Selecionar todos

<!doctype html>
<html lang="en">

<body>

<?php
	 
$mensagem = "27dHr8UjEYAl2XXEnf+702vZKHwyEbaqlwN6JmGP4uI=";
$algoritimo = "AES-256-CBC";
$chave = "djfd dfkfjdkl vkfdjak fdsaj@!";
$iv = "wNYtCnelXfOa6uiJ";

$mensagem = openssl_decrypt(base64_decode($mensagem), $algoritimo, $key, OPENSSL_RAW_DATA, $iv);
echo $mensagem; //já que codificamos a mensagem em base64 foi preciso decodificá-la.
//saída da função é "meu texto a ser encriptado"

?>

</body>

</html>	  
Inacio de Carvalho Neto
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Proteção de Banco de Dados MySQL

Mensagem por rochinha »

Amiguinhos,

Não é de bom tom usar espaços dentre os trechos. Se precisar separar sentenças use Underline ou Subtração. As funções do OpenSSL tanto no Prompt quanto na Web trabalham identicamente e portanto deverão obter e devolver os mesmos resultados.

Troque a veriável $key na função decript por $chave.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

Ainda não deu certo.
O que será que estou fazendo errado?

Segue o código:

Código: Selecionar todos

<!doctype html>
<html lang="en">


<body>

<?php
	 
$mensagem = "zAw12Fv1VuavzXLllWPyYV664CvKK65lgnU5bvoyH7wd";
$algoritimo = "AES-256-CBC";
$chave = "senhateste";
$iv = "wNYtCnelXfOa6uiJ";

$mensagem = openssl_decrypt(base64_decode($mensagem), $algoritimo, $chave, OPENSSL_RAW_DATA, $iv);
echo $mensagem; //já que codificamos a mensagem em base64 foi preciso decodificá-la.
//saída da função é "meu texto a ser encriptado"


?>

</body>

</html>	  
Inacio de Carvalho Neto
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Proteção de Banco de Dados MySQL

Mensagem por rochinha »

Amiguinhos

cjp A $mensagem não está codificada em Base64. Toda codificação neste padrão gera string terminadas em ==

As funções openssl devem estar presentes em seu ambiente com PHP.

Código: Selecionar todos

<?php
     
$mensagem = "zAw12Fv1VuavzXLllWPyYV664CvKK65lgnU5bvoyH7wd";
$mensagem = "R2Vla3Nmb3JHZWVrcw==";
$algoritimo = "AES-256-CBC";
$chave = "senhateste";
$iv = "wNYtCnelXfOa6uiJ";
 
//$mensagem2 = openssl_decrypt(base64_decode($mensagem), $algoritimo, $chave ); //, OPENSSL_RAW_DATA, $iv);

echo $mensagem;
echo "<br>";
echo $algoritimo;
echo "<br>";
echo $chave;
echo "<br>";
echo $iv;
echo "<br>";

$str = 'R2Vla3Nmb3JHZWVrcw==';
echo base64_decode($str);

base64_decode($mensagem);
echo "<br>";
echo "<br>";
echo "<br>";

$mensagem = "meu texto a ser encriptado";
if(function_exists('openssl_encrypt'))
     echo $encriptado = openssl_encrypt($mensagem, $algoritimo, $chave, false, $iv);
  else
     echo $encriptado = (exec("echo \"".$mensagem."\" | openssl enc -".urlencode($algoritimo)." -base64 -nosalt -K ".bin2hex($chave)." -iv ".bin2hex($iv)));


if(function_exists('openssl_decrypt'))
     echo $decriptado = openssl_decrypt($encriptado, $algoritimo, $chave, false, $iv);
  else
     echo $decriptado = (exec("echo \"".$encriptado."\" | openssl dec -".urlencode($algoritimo)." -base64 -nosalt -K ".bin2hex($chave)." -iv ".bin2hex($iv)));

//saída da função é "meu texto a ser encriptado"
 
?>

Ta bagunçado mas acertado.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

Sim, funcionou.

Mas o texto anterior foi encriptado com o base64 no Harbour, conforme sugerido acima.

Como posso testar encriptar no Harbour e desencriptar no PHP, ou vice-versa?
Inacio de Carvalho Neto
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Proteção de Banco de Dados MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
Isso não é proteção de dados. Proteção de dados chama-se backup!
Se precisar indexar ou fazer uma procura ou qualquer relatório vai ser um problema com esses campos com base64.
MARIA DE LURDES é uma coisa *&¨@#&@#¨é outra coisa. Vai procurar como ? Vai mexer no seu fonte vai ficar horrível.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

A proteção que preciso não é para evitar eventuais perdas de dados. Backup eu já tenho.
Preciso de proteção contra acesso de terceiros ao meu banco de dados. Não sei se é essa é a melhor forma, vc teria outra sugestão?
Inacio de Carvalho Neto
Avatar do usuário
clodoaldomonteiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 821
Registrado em: 30 Dez 2006 13:17
Localização: Teresina-PI
Contato:

Proteção de Banco de Dados MySQL

Mensagem por clodoaldomonteiro »

cjp escreveu:A proteção que preciso não é para evitar eventuais perdas de dados. Backup eu já tenho.
Preciso de proteção contra acesso de terceiros ao meu banco de dados. Não sei se é essa é a melhor forma, vc teria outra sugestão?
Olá!
Com uma busca na internet cheguei a este site: https://edrodrigues.com.br/blog/9-dicas ... -do-mysql/, mas o assunto segurança de dados, quando vc tem um servidor online que tem uma porta aberta para ser acessada de aplicações em qq lugar, é meio complicado.
O bom mesmo seria contratar um especialista na questão, pois acho que não é assunto de programador.

Na minha solução, que é desktop, faço conexão com meu Banco num servidor da AWS, e é claro, está aberto para o mundo, mas fazer o que?
Pois pra resolver metade do problema, só trabalhando com MVC e REST-Full, mas dá muito trabalho, tenho até outras soluções que usam, mas as antigas, não.

A única dica q posso dar é fracionar as Strings de conexão, variável do Servidor, da senha.
Exemplo:

Código: Selecionar todos

   mServer := "http://meu_servidor.com.br"
   //Ficaria: 
   ms1 := "com.br"
   ms2 := "http://meu_s"
   ms3 := "servidor."
   mxps := md2+ms3+ms1 //não use nome de variáveis comuns 
   //Faça o mesmo com a variável da senha
   //Pode até mesmo encriptar as strings e descriptar quando for usar
   //O fato é, que quando vc abre a seu executável com o NotePad++, dá pra vc ver os nomes das variáveis e seu conteúdo, e não é exclusividade do xBase.
Abraços.
At. Clodoaldo Monteiro
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Proteção de Banco de Dados MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
Preciso de proteção contra acesso de terceiros ao meu banco de dados.
Proteção que todos usam é SENHA. Não é "embolando" informações nos dados do servidor. Isso vai te dar uma dor de cabeça ainda maior.
Manda esse Hacker entrar nos servidores da LOCAWEB por exemplo. Lá tem Mysql, porta, quero ver ele invadir e outras tantas milhares.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

Proteção de Banco de Dados MySQL

Mensagem por cjp »

Senha eu já tenho, claro, mas obviamente só a senha não é suficiente, pois o hacker conseguiu abrir e salvar meu banco de dados inteiro.
Gostei da ideia do Clodoaldo. Mas, será que resolve? O hacker não iria também conseguir acessar, já que de qualquer forma as informações estão no .exe?
Qual é a segurança do Locaweb?
Em suma, como posso implantar uma segurança efetiva contra alguém que maliciosamente queira acessar meu banco de dados?
Inacio de Carvalho Neto
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Proteção de Banco de Dados MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
pois o hacker conseguiu abrir e salvar meu banco de dados inteiro.
Claro se ele está ai mexendo na rede. Só copiar a pasta do Mysql e resetar a senha master.
Fiz isso aqui, pois uma empresa não queria passar a senha da base de dados. Fiz no Postgres.
Quero ver ele fazer isso com o banco de dados FORA desse local, sem acesso as maquinas ai da sua rede.
Se eu tenho acesso FÍSICO a rede interna (mexer nas maquinas tirar HD) com um pendrive posso copiar qualquer coisa de qualquer pasta windows.
https://cursos.alura.com.br/forum/topic ... ysql-51825

Código: Selecionar todos

Você consegue resetar ele com os seguintes comandos no terminal:
use mysql;
update user set authentication_string=password('sua_nova_senha') where user='root';
flush privileges;
quit
Olha a dificuldade!
Se vc criptografar seus dados, vai trazer problemas pra você mesmo.
Tudo que puxar lá no HeidiSQL da vida vem tudo doido!.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Proteção de Banco de Dados MySQL

Mensagem por Itamar M. Lins Jr. »

Olá!
Em suma, como posso implantar uma segurança efetiva contra alguém que maliciosamente queira acessar meu banco de dados?
Não deixar a pessoa chegar perto do CPU.
Se ela tem acesso ao CPU fisicamente, ela pode até roubar as peças.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder