Executando verificação de segurança...
7

Pitch: Acesse seu banco de dados postgres pelo navegador.

Olá! Prazer me chamo Marcelo e sou desenvolvedor web.
A uns tempos atrás estava trabalhando em um side project e ele, assim como muitos projetos, usava um banco de dados.

Eu tinha recém formatado minha máquina e estava apenas com o vscode e node, e não tem muito como trabalhar com um banco de dados sem acessa-lo, você estaria desenvolvendo quase que "vendado".

E pulando uma parte da história e indo direto ao ponto, estou trabalhando em um side project que seria um gerenciador de banco de dados pelo navegador

LINK: https://sql.vuekoo.com
PS: no momento só aceita bancos POSTGRES

Ainda estou desenvolvendo ele, pode se dizer que ele está em fase de testes, porém, ainda assim, já está me ajudando bastante no dia a dia do meu trabalho.

Pois além de ser "mais leve" visto que é apenas uma aba do navegador, é mais prático as vezes do que ter que instalar uma ferramenta a mais para isso.

Queria apenas compartilhar o desenvolvimento do projeto, pois, assim como está sendo útil para mim mesmo em "beta" e com pequenos bugs que estão sendo resolvidos, pode ser que ajude mais alguém.

Carregando publicação patrocinada...
9

Algumas considerações de segurança que sugiro que analise:

Banco de dados publicamente acessível

Veja que qualquer um que consiga as credenciais do banco de dados consegue conectar a ele. Isso é um problema pois se as credenciais vazarem de algum jeito, qualquer um consegue ter acesso ao mesmo.

Isso nem é sobre sua plataforma em si mas sim sobre o pré-requisito dela para que ela possa se conectar ao banco de dados.

É importante que bancos de dados não sejam publicamente acessíveis pois credenciais vazam, senhas não são tão confiáveis assim. Seja por erro humano, seja por vulnerabilidade na aplicação que se conecta ao banco de dados, falha de configuração, malware etc.

Existem várias maneiras diferentes onde um criminoso pode obter as credenciais do banco de dados. É importante trabalhar assumindo que isso vai acontecer um dia e só deixar o banco de dados acessível via servidor da aplicação.

Confiança em terceiro

Para alguém usar sua plataforma precisa confiar em você... Quem é você?

Não é questão de achar que você seja um criminoso, mas confiar em você também significa confiar que você não vai, nunca, cometer um errinho sequer em relação à segurança desta plataforma... Você se garante?

Agora digamos que você cometa um errinho sequer, e uma empresa tem um prejuízo milionário por causa da tua plataforma. Você vai pagar o prejuízo? Não vai.

Veja o phpMyAdmin por exemplo que é uma aplicação semelhante, ela é self-hosted e open source o que faz muita diferença. Não depende da confiança na plataforma/servidor/domínio de terceiros.

Plataforma publicamente acessível

Digamos que você resolveu os dois problemas acima, agora tá equiparável a um phpMyAdmin da vida...

Beleza, mas plataformas como phpMyAdmin também tem outro problema (nesse caso de configuração): elas não podem ficar publicamente acessíveis. Pois caso contrário cai no mesmo problema de deixar o banco de dados publicamente acessível: se alguém conseguir uma credencial de acesso já era...

Além disso a plataforma em si pode ter vulnerabilidades e outros tipos de falhas de segurança.

Então plataformas como essa podem ser usadas sim, mas não podem ficar publicamente acessível senão é um risco de segurança.

Deve ser feito algo à respeito, como:

  • Só deixar a plataforma disponível em uma rede privada (ex.: conectando via VPN)
  • Fazer um SSO prévio para liberar acesso à plataforma
  • Rodar a plataforma somente em localhost no servidor e fazer um SSH tunneling para acessar a plataforma
  • etc.
1

Opa, bom dia.
Algumas questões de segurança acredito que não sejam uma preocupação tão grave, pois, os bancos de dados adicionados pelo usuário ficam armazenados nos cookies e somente, a aplicação em si não possui nenhum banco de dados, backend ou coisa do tipo para armazenamento por usuário.

A ideia inicial do projeto era realmente ser self-hosted, porém, iria cair justamente no âmbito de você precisar instalar uma coisa a mais na sua máquina, ou baixar algo a mais, sendo que a ideia é justamente a portabilidade de você conseguir acessa-la de qualquer lugar.

E também sobre a questão de confiança, entendo que esse talvez seja o mais díficil, mas o código fonte do projeto já está aberto, no momento que escrevo isso ainda não adicionei um link dentro do próprio projeto, mas ainda irei.

E obrigado, agradeço pelo feedback sobre e estarei trabalhando em cima do que foi falado.

Código fonte do projeto: https://github.com/mvrcelitos/sql.vuekoo

1

Não vou desmerecer seu projeto. Tenho certeza que deu um belo trabalho para ser feito e parece estar muito bom. Mas creio que esse é um problema que a web não é a solução ideal. Por mais que o código seja opensource, não a garantia alguma de segurança. Mesmo que o código seja aberto, consegue garantir que em nenhum momento haja uma vulnerabilidade de Cross site scripting? Ou de qualquer outra categoria? É uma baita responsabilidade. Não se engane, segurança é sempre uma questão grave, e para fins de proteção sempre deixe claro nos termos de uso que está se eximindo de qualquer modificação no banco de dados dos clientes por eles ou por terceiros.

0

Usar uma aplicação desktop ao invés de web não tornaria mais seguro, na verdade teria o efeito oposto pois haveria algumas questões de segurança a mais para se preocupar:

  • O banco de dados vai ser liberado para ser acessado pelo IP de quem usa a aplicação desktop?
    • Se sim, é um risco de segurança. Pois a máquina do usuário é confiável? A rede do usuário é confiável? A maneira mais fácil de invadir o sistema de uma empresa é atacando seus funcionários, que costumam ser negligentes com a própria segurança
  • A comunicação com o banco de dados é encriptada? Existe o risco de um ataque MITM?
  • Não é possível usar controles de segurança como SSO e MFA sem uma aplicação web intermediando a comunicação com o servidor
  • Não é possível ter um controle de acesso e monitoramento (logs) mais preciso e avançado de quem, quando e onde acessou o banco de dados
  • Em caso de comprometimento de um funcionário (ex.: máquina infectada por um malware), fica bem mais complicado revogar os acessos do mesmo sem um SSO

Dentre outros problemas que daria para pensar se dedicar mais tempo, acima é o que pensei em menos de 5 minutos.

Então por mais que esteja na moda falar mal de web (admito: eu fazia isso também há uns anos atrás), a verdade é que é uma ilusão isso de que desktop é mais seguro. Na verdade a situação é exatamente oposta: web tende a ser mais seguro.

Não é por "modinha" que muitas empresas preferem web, existem muitos motivos técnicos e comerciais para essa preferência.


Por mais que o código seja opensource, não a garantia alguma de segurança.

Projeto nenhum tem garantia nenhuma de segurança. Seja web, mobile, desktop, cli, embarcado etc.

Segurança é sobre diminuir riscos e impactos, e dificultar a vida do atacante. Não é sobre "garantir" nada. Na verdade quem "garante" segurança, geralmente, são as pessoas menos capacitadas no assunto. É o tal do efeito Dunning-Kruger.

-1

Um app desktop leva a responsabilidade de manter a segurança no usuário. Eu realmente mantenho o conselho de se proteger nos termos de uso. Não é um criticismo ao seu app. É apenas um conselho que acho válido. Assim como a preocupação de segurança é importante, a jurídica pra você também é.

-3

Não sou o criador da aplicação, é o @mvrcelo.

Um app desktop leva a responsabilidade de manter a segurança no usuário.

Outro jeito de falar isso é: "Um app desktop é negligente em relação a segurança e deixa o usuário se fuder, sem levantar um dedo para tentar ajudá-lo"

Que tipo de desenvolvedor faz um projeto já prevendo que vai dar merda na segurança? Se é previsível então que evite os problemas.

Cara, você desenvolver algo que sabe que diminui a segurança da empresa, divulgar esse projeto e influenciar que gente leiga use teu projeto... Irmão, isso só pode ser chamado de mal caratismo.

-1

Cara, eu não estou dizendo nada disso. Não tire suposições de frases curtas se não conhece toda a linha de pensamento. Se quiser brigar em comentários por motivo nenhum procure outro. Se acha que penso o que você falou poderia ter perguntado mais antes de sair cuspindo críticas nesse tom. Tenha boa fé com as pessoas.

2

Eu sempre tenho boa fé (é até um defeito meu, pois faço isso em excesso), e por isso mesmo em momento algum me passou pela cabeça que você teria más intenções.

Eu não quero "brigar" e em momento algum fiz isso. Só o que estou fazendo é levantar questões em relação a segurança do projeto. Eu sinceramente, com todo o coração, não consigo ver como você poderia interpretar o que eu disse como uma tentativa de "brigar".

Só o meu ponto é que todos os problemas de segurança do projeto do colega podem ser evitados e eu apontei como evitá-los. Então "fugir" para o desktop e "jogar a responsabilidade da segurança para o usuário", seria mal caratismo.

Não concorda com isso?

Se você não concorda, tudo bem. Você não é obrigado a concordar com nada nem com ninguém.

Mas daí acusar de eu estar tentando criar uma "briga" é outra história. Se não concorda então apenas discorde. Não fica querendo transformar os outros em um "vilão", como se eu estivesse com um plano maligno para "brigar" com os outros "por motivo nenhum".

Por favor, né? Vamos manter o nível.

0

Eu concordei com. Tudo que você disse sobre segurança. Novamente, você interpretou que não. Mesmo essa frase não sendo dita em nenhuma frase. Enfim. Vida que segue. Eu creio que apenas interpretamos mal a intenção um do outro e se tivéssemos conversado naturalmente r não por texto estaríamos concordando plenamente um com o outro e levantando pontos complementares.

-2

Novamente, você interpretou que não. Mesmo essa frase não sendo dita em nenhuma frase.

Em momento algum me passou pela cabeça que você discordou do que eu disse. Eu escrevi isso em algum momento? Não, logo foi você que interpretou algo que não foi escrito. 😄

E também não interpretei mal sua intenção em momento algum. Eu entendi plenamente sua intenção de ajudar na questão jurídica.

Meu comentário inicial foi em relação a essa frase:

Mas creio que esse é um problema que a web não é a solução ideal.

Pois, pelo contrário, web é uma solução melhor do que desktop neste caso. E daí argumentei para defender esse ponto.

0

Algumas questões de segurança acredito que não sejam uma preocupação tão grave, pois, os bancos de dados adicionados pelo usuário ficam armazenados nos cookies e somente, a aplicação em si não possui nenhum banco de dados, backend ou coisa do tipo para armazenamento por usuário.

Creio que você não leu com atenção o que eu escrevi, pois essa informação não muda em absolutamente nada o que eu falei. Todos os pontos de segurança que eu levantei permanecem intocados.

Na verdade adicionou mais um: pois cookies do navegador não são encriptados. Ou seja, as credenciais de acesso do banco de dados estão sendo armazenadas em texto claro no computador do usuário.

É o mesmo risco de você salvar senhas em um arquivo de texto na sua pasta documentos.

Ou seja, além dessa informação não ter mudado em nada os problemas que eu já tinha apontado, pelo contrário, me obrigou a apontar mais um.

A ideia inicial do projeto era realmente ser self-hosted, porém, iria cair justamente no âmbito de você precisar instalar uma coisa a mais na sua máquina, ou baixar algo a mais, sendo que a ideia é justamente a portabilidade de você conseguir acessa-la de qualquer lugar.

Mas rodar na sua máquina não é o conceito de self-hosted. Self-hosted é você iniciar um servidor, instalar a aplicação lá e gerenciar o servidor por conta própria. Por isso o "hosted" no nome, significa que você vai hospedar (host) a aplicação por conta própria (by self).

E também sobre a questão de confiança, entendo que esse talvez seja o mais díficil, mas o código fonte do projeto já está aberto, no momento que escrevo isso ainda não adicionei um link dentro do próprio projeto, mas ainda irei.

Entenda cara, usar tua plataforma pelo seu link significa que:

  • A pessoa confia que o servidor da aplicação não foi invadido por ninguém
  • A pessoa confia que o domínio que aponta para sua aplicação não foi adulterado para apontar para um "clone" falso dela
  • A pessoa confia que nenhum atacante deu um jeito de injetar e executar código na sua aplicação
  • A pessoa confia que nenhum atacante deu um jeito de roubar os cookies da sua aplicação
  • etc.

Tornar o código open source mudou alguma coisa em relação aos pontos acima? Não, por isso falei sobre ser self-hosted.

3

Muito legal a ideia! Mas, eu não sei se confiaria colocar os acessos do meu banco de dados na sua plataforma.

Entendo que é inicial, e estou dando minha opinião baseado no momento atual do seu projeto.

Não precisei criar conta (o que de certa forma pode ser bom), porém não aparece nenhum termo de uso, como os dados são salvos, LGPD ou algo do tipo...

Se fosse possível ver o código fonte, talvez ajudasse =)

Mas, voltando ao que comentei, a ideia é ótima. Vou ficar de olho!

1

Pretendo tornar o código fonte acessível e não tinha pensando sobre, mas irei criar alguma página ou documento informando sobre os termos de uso.

Também entendo que de primeira possa parecer um scam ou algo do tipo e estou planejando já como irei remover alguns commits sensíveis para deixa-lo como código aberto.

E agradeço pelo feedback, estou trabalhando arduamente nele para extrair o melhor dele.

2

Gostei muito, Marcelo! A interface parece ser bem legal. No entanto, não tenho um banco de dados para conectar e testar. Talvez fosse interessante adicionar um no demo... Você poderia fazer um vídeo mostrando as funcionalidades e como é a interface uma vez conectada a um banco de dados?

Mas estou curioso, por que escolher esta ferramenta em vez do pgAdmin (em modo web)? Ou, se a ideia é algo realmente leve, por que não usar apenas o terminal? Parece-me que, com essas opções disponíveis, não há muito motivo para gastar tanto esforço para desenvolver algo?!

Mas enfim, eu realmente gostaria de testar. Parabéns pelo projeto e obrigado por compartilhar!

1

Excelente projeto! Mandou ver. Minha sugestão para mitigar os problemas de segurança é usar um ambiente sandbox. Já viu aqueles projetos que rodam NodeJS direto do navegador? Ou seja, sem precisar de um servidor?

Isso pode ser uma alternativa, pois o projeto rodaria diretamente na maquina do cliente e assim, diminuiria os riscos de dano.

Veja um video da Rocketseat:
https://www.youtube.com/watch?v=P3Yh5ifTYPQ

Boa sorte com o projeto!

1

Muito bom e símples, interface amigável e realmente é bem leve.

A unica questão que vejo e compartilho junto com os outros comentários é sobre a segurança e abrir o código fonte seria bem interessante mesmo, mostrar como está sendo a conexão é a melhor solução para essa questão de segurança.

Parabéns pelo projeto e sucesso.