Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte ao desenvolvimento de jogos


4 participantes

    Banco de dados MySQL

    Valentine
    Valentine
    Administrador
    Administrador


    Medalhas : Banco de dados MySQL ZgLkiRU
    Mensagens : 5336
    Créditos : 1163

    Banco de dados MySQL Empty Banco de dados MySQL

    Mensagem por Valentine Dom Mar 31, 2019 5:25 pm

    Compatibilidade
    Versão do VXA-OS: 1.0.7

    Plugin/Suporte MySQL
    » Reestruturado todo o script database.rb
    » Removido arquivos binários que eram utilizados como banco de dados
    » O banco de dados pode ser hospedado paralelo ao servidor, ganhando performance e escalabilidade
    » O servidor grava todas as informações de contas, jogadores, bancos, switches, variaveis no banco de dados
    » Self-deleted para os personagens, não ocasionando perda de dados e para futuros sistemas

    Arquivos alterados
    Todas as mudanças foram comentadas para identificar e para um melhor entendimento, segue abaixo lista de scripts modificados
    » Main.rb
    Adicionado o método para criar o banco de dados
    » Database.rb
    Contém todas as interações do banco de dados
    » Handle_data.rb
    Alterada a função "handle_login" e "handle_new_character"
    » Game_accounts.rb
    Alterada a função "save_data"
    » Structs.rb
    Alterado os models Account e Actor
    » Nova pasta Database
    Config.json contém as configurações de conexão com o servidor MySQL
    vxaos_srv.sql contém o script que cria o banco de dados e suas tabelas, por favor não alterar o arquivo, apenas se souber o que está fazendo.

    Como configurar
    1) Instale o Ruby Windows, Linux
    1.1) Em ambiente Linux, além de instalar o Ruby, precisa instalar outras depencencias como:
    sudo apt-get install build-essential patch
    sudo apt-get install ruby-dev zlib1g-dev liblzma-dev libffi-dev gcc make libmysqlclient-dev
    1.2) Em ambiente Windows ou Linux instale as gem's
    » gem install eventmachine
    » gem install mysql2
    No Windows é um pouco complicado essa gem, então baixe esses arquivos Mega.nz e descompacte em alguma pasta. Após descompactar execute o seguinte comando para instalar: gem install mysql2 -- '--with-mysql-lib="caminho_onde_extraiu\lib" --with-mysql-include="caminho_onde_extraiu\include"
    » gem install json
    » gem install colorize
    2) Instale o servidor MySQL 5.7 Windows, Linux
    3) Renomeie o arquivo Database/config.sample para Database/config.json
    4) Altere o arquivo Database/config.json com as informações do banco de dados
    » host
    » port
    » user
    » password
    5) Execute o script main.rb pelo terminal (cmd)
    ./main.rb ou ruby main.rb
    O Script cria automaticamente o banco de dados e suas tabelas caso não existirem e com isso será iniciado.
    Ao utilizar Linux execute o comandoo: nohup ruby main.rb $
    Com isso será executado em segundo plano, podendo sair do terminal ssh.
    Banco de dados MySQL 68747470733a2f2f696d6167652e70726e747363722e636f6d2f696d6167652f7752687a4d394c45515375646b5f49634d77397266672e706e67

    Arquivos não monitorados
    Segue abaixo lista de arquivos não monitorados, ou seja, podemos modificar qualquer informação desses arquivos e eles não serão enviados para o git. O gitignore foi configurado dessa forma para não interferir em outros projetos. Ao clonar o projeto certifique-se de adicionar seus próprios arquivos.
    Icon/.
    Data/.
    Logs/.
    configs.ini
    quests.ini
    motd.txt
    Database/config.json

    Download
    GitHub

    Créditos
    Gallighanmaker


    Última edição por Valentine em Qua Dez 29, 2021 11:29 am, editado 4 vez(es)
    GallighanMaker
    GallighanMaker
    Colaborador
    Colaborador


    Medalhas : Banco de dados MySQL ZgLkiRU
    Mensagens : 985
    Créditos : 102

    Ficha do personagem
    Nível: 1
    Experiência:
    Banco de dados MySQL Left_bar_bleue0/0Banco de dados MySQL Empty_bar_bleue  (0/0)
    Vida:
    Banco de dados MySQL Left_bar_bleue30/30Banco de dados MySQL Empty_bar_bleue  (30/30)

    Banco de dados MySQL Empty Re: Banco de dados MySQL

    Mensagem por GallighanMaker Seg Abr 01, 2019 12:27 am

    Pessoal, atualizei o git com algumas melhorias na documentação porém o @Valentine vai atualizar aqui. Qualquer dúvida sobre o plugin por favor compartilhar, irei ajudar assim que possível.


    _________________
    Banco de dados MySQL 8dVK0ku
    using C# and import Python developer || Expert in Unity Engine IDE. || Banco de dados MySQL 769_heart 2D pixel games.
    Kyo Panda
    Kyo Panda
    Novato
    Novato


    Mensagens : 15
    Créditos : 4

    Banco de dados MySQL Empty Re: Banco de dados MySQL

    Mensagem por Kyo Panda Seg Abr 01, 2019 9:04 am

    Essa parada aqui no database.rb:

    Código:
    # Consulta para listar a conta de usuario
    query_load_account = "SELECT * FROM accounts WHERE username = '#{user}'"

    Não abre brecha para injeção de SQL?


    _________________
    Banco de dados MySQL 1x
    Valentine
    Valentine
    Administrador
    Administrador


    Medalhas : Banco de dados MySQL ZgLkiRU
    Mensagens : 5336
    Créditos : 1163

    Banco de dados MySQL Empty Re: Banco de dados MySQL

    Mensagem por Valentine Seg Abr 01, 2019 9:26 am

    Kyo Panda escreveu:Essa parada aqui no database.rb:

    Código:
    # Consulta para listar a conta de usuario
    query_load_account = "SELECT * FROM accounts WHERE username = '#{user}'"

    Não abre brecha para injeção de SQL?
    A gem usada por ele é uma abstração para MySQL e SQLite, ou seja, você consegue usar os dois sem precisar alterar muita coisa no código.
    Kyo Panda
    Kyo Panda
    Novato
    Novato


    Mensagens : 15
    Créditos : 4

    Banco de dados MySQL Empty Re: Banco de dados MySQL

    Mensagem por Kyo Panda Seg Abr 01, 2019 9:58 am

    Injeção de SQL rola tanto no MySQL, quanto no SQLite. Numa query dessa, se ela não for preparada, um request feito com o user:

    Código:
    '; DROP DATABASE users;--

    Pode gerar problemas.

    ---

    Pelo que vi na gem MySQL2, tem como fazer prepare de query:

    Código:
    # Consulta para listar a conta de usuario
    query_load_account = "SELECT * FROM accounts WHERE username = ?"

    stmt = mysql_client.prepare(query_load_account)

    result = stmt.execute(user)

    Isso evitaria que algum cretino tente alguma graça.

    É até possível ficar fazendo sanitize de campo para evitar isso, mas é sempre melhor usar os built-in das linguagens.


    _________________
    Banco de dados MySQL 1x
    Valentine
    Valentine
    Administrador
    Administrador


    Medalhas : Banco de dados MySQL ZgLkiRU
    Mensagens : 5336
    Créditos : 1163

    Banco de dados MySQL Empty Re: Banco de dados MySQL

    Mensagem por Valentine Seg Abr 01, 2019 10:04 am

    Kyo Panda escreveu:Injeção de SQL rola tanto no MySQL, quanto no SQLite. Numa query dessa, se ela não for preparada, um request feito com o user:

    Código:
    '; DROP DATABASE users;--

    Pode gerar problemas.

    ---

    Pelo que vi na gem MySQL2, tem como fazer prepare de query:

    Código:
    # Consulta para listar a conta de usuario
    query_load_account = "SELECT * FROM accounts WHERE username = ?"

    stmt = mysql_client.prepare(query_load_account)

    result = stmt.execute(user)

    Isso evitaria que algum cretino tente alguma graça.

    É até possível ficar fazendo sanitize de campo para evitar isso, mas é sempre melhor usar os built-in das linguagens.
    Agradecemos pela contribuição. É sempre bom evitar que cretinos façam cretinices.

    Tópico atualizado.
    GallighanMaker
    GallighanMaker
    Colaborador
    Colaborador


    Medalhas : Banco de dados MySQL ZgLkiRU
    Mensagens : 985
    Créditos : 102

    Ficha do personagem
    Nível: 1
    Experiência:
    Banco de dados MySQL Left_bar_bleue0/0Banco de dados MySQL Empty_bar_bleue  (0/0)
    Vida:
    Banco de dados MySQL Left_bar_bleue30/30Banco de dados MySQL Empty_bar_bleue  (30/30)

    Banco de dados MySQL Empty Re: Banco de dados MySQL

    Mensagem por GallighanMaker Seg Abr 01, 2019 11:58 pm

    @Kyo Panda boa man, não fiz nada relacionado a segurança ainda e a minha ideia era converter toda a base de dados, é logico que segurança é importante mas só esse trabalho de converter tudo já vai ajudar os projetos a subirem um degrau, dai pra frente é melhorias e se proteger. Se interessar, pode realizar commits no repositório , deixarei aberto essa possibilidade pra melhorias do pessoal como a que sugeriu.


    _________________
    Banco de dados MySQL 8dVK0ku
    using C# and import Python developer || Expert in Unity Engine IDE. || Banco de dados MySQL 769_heart 2D pixel games.
    IsraTwerknov
    IsraTwerknov
    Iniciante
    Iniciante


    Mensagens : 40
    Créditos : 5

    Ficha do personagem
    Nível: 1
    Experiência:
    Banco de dados MySQL Left_bar_bleue0/0Banco de dados MySQL Empty_bar_bleue  (0/0)
    Vida:
    Banco de dados MySQL Left_bar_bleue30/30Banco de dados MySQL Empty_bar_bleue  (30/30)

    Banco de dados MySQL Empty Re: Banco de dados MySQL

    Mensagem por IsraTwerknov Sáb Out 05, 2019 3:09 pm

    Blast escreveu:"No Windows é um pouco complicado essa gem, então baixe esses arquivos Mega.nz e descompacte em alguma pasta. Após descompactar execute o seguinte comando para instalar: gem install mysql2 -- '--with-mysql-lib="caminho_onde_extraiu\lib" --with-mysql-include="caminho_onde_extraiu\include"



    Onde esta esse arquivo do Mega.nz?


    _________________
    Banco de dados MySQL Banner10

    Conteúdo patrocinado


    Banco de dados MySQL Empty Re: Banco de dados MySQL

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Qui Mar 28, 2024 3:40 pm