Proteção de Banco de Dados MySQL
Moderador: Moderadores
Proteção de Banco de Dados MySQL
O exemplo do Ivanil agora funcionou.
Acho que estou pronto para implantá-lo em meu sistema.
Mas antes preciso ver como seria em php.
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

- Mensagens: 166
- Registrado em: 11 Set 2004 15:13
- Localização: Florianópolis/SC
Proteção de Banco de Dados MySQL
Caro amigo, não se atenha a apenas parte da mensagem, veja o conteúdo da função.rochinha escreveu:Base64 é uma codificação padronizada. Como não funcionaria no PHP e no Harbour
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.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Proteção de Banco de Dados MySQL
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.
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.
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:
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="
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"
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Proteção de Banco de Dados MySQL
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:
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
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Proteção de Banco de Dados MySQL
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.
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Proteção de Banco de Dados MySQL
Ainda não deu certo.
O que será que estou fazendo errado?
Segue o código:
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
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Proteção de Banco de Dados MySQL
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.
Ta bagunçado mas acertado.
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"
?>
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Proteção de Banco de Dados MySQL
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?
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
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Proteção de Banco de Dados MySQL
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.
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.
Itamar M. Lins Jr.
Proteção de Banco de Dados MySQL
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?
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
- clodoaldomonteiro
- 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
Olá!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?
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.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
Linguagens: Clipper / Harbour
Área de Atuação: Sistemas de gestão para Prefeituras Municipais
Fones: (86)3223-0653, 98859-0236
www.simplesinformatica.com.br
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Proteção de Banco de Dados MySQL
Olá!
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.
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.Preciso de proteção contra acesso de terceiros ao meu banco de dados.
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.
Itamar M. Lins Jr.
Proteção de Banco de Dados MySQL
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?
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
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Proteção de Banco de Dados MySQL
Olá!
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
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.
Claro se ele está ai mexendo na rede. Só copiar a pasta do Mysql e resetar a senha master.pois o hacker conseguiu abrir e salvar meu banco de dados inteiro.
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
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.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Proteção de Banco de Dados MySQL
Olá!
Se ela tem acesso ao CPU fisicamente, ela pode até roubar as peças.
Saudações,
Itamar M. Lins Jr.
Não deixar a pessoa chegar perto do CPU.Em suma, como posso implantar uma segurança efetiva contra alguém que maliciosamente queira acessar meu banco de dados?
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.
Itamar M. Lins Jr.
