Digamos que eu estava planejando, no futuro (agora não! Preciso aprender muito primeiro) procurando participar de um projeto em grupo que criaria um jogo on-line para vários jogadores (mmo), e meu trabalho seria o trabalho em rede parte. Não estou familiarizado com programação de rede (li um livro muito básico sobre PHP, MYSQL e brinquei um pouco com o WAMP ).
No curso de meus estudos de PHP e MYSQL, devo analisar os hackers? Hacking como na verificação de portas, hackers de roteadores etc. Nos MMOs, as pessoas estão sempre tentando enganar, bots e outros, mas o pior cenário seria ter alguém invadindo os bancos de dados. Esta é apenas a minha concepção disso, eu realmente não sei. No entanto, eu entendo muito bem a rede, como sub-redes / portas / IPs (local / global) / etc.
Na sua opinião profissional (se você entende o tópico, me esclareça) Devo aprender sobre essas coisas para combater a possibilidade de isso acontecer?
Além disso, dentre as coisas que mencionei (varredura de portas, invasão de roteadores) Há mais alguma coisa relacionada a invasões que eu deveria investigar? Não estou muito familiarizado com os aspectos maliciosos / de segurança das redes.
E uma observação: eu não sou um garoto tentando aprender a hackear. Eu só quero aprender o máximo possível antes de ir para a faculdade e realmente preciso saber se preciso estudar isso ou não.
fonte
Respostas:
Sim, alguém (de fato, vários membros) da equipe que desenvolve qualquer jogo multiplayer, independentemente da escala, deve ter um forte conhecimento prático dos conceitos de segurança de rede nos níveis de hardware e software.
Isso é especialmente verdadeiro para jogos que envolvem muita persistência de agência, uma vez que isso constitui um investimento por parte do jogador e, consequentemente, é algo que faz um alvo lucrativo para hackers.
Tomar aulas de rede / segurança de rede / segurança geral (criptografia, etc.) na faculdade será útil para fornecer a você alguns dos conhecimentos básicos necessários para ser um desses desenvolvedores mencionados anteriormente.
fonte
Saber alguma coisa sobre segurança é uma boa ideia antes de tentar escrever um jogo para vários jogadores, mas coisas como varredura de portas e hackers de roteadores, ou mesmo criptografia, não são o que você deve procurar neste estágio.
Em vez disso, você deve aprender sobre confiança , validação e robustez . Saber um pouco sobre psicologia, especialmente sobre desafios e recompensas, também não é uma coisa ruim. Não posso ensinar muito sobre isso em uma resposta curta como esta, mas aqui estão algumas dicas para você começar a programar com segurança:
Trate qualquer entrada de fora do seu controle direto como se não fosse o que você esperava. Isso inclui toda a entrada do usuário, tudo o que você recebe pela rede e até qualquer coisa de outras partes da sua base de código. Tente entrar na mentalidade de não pensar no que a entrada deve conter, ou mesmo sobre o que um invasor pode alimentar você, mas simplesmente sobre o que a entrada poderia ser e como lidar com segurança com qualquer entrada possível que você possa obter.
Desde que você mencionou o PHP e o MySQL, comece analisando os ataques de injeção de SQL e de script entre sites . Se você também conhece idiomas de baixo nível, como C, analise os ataques de estouro de buffer . Não pense apenas em como evitá-los - pense em como você escreveria seu código para que erros como esse simplesmente não ocorram, seja por acidente ou por maldade. Sua linguagem de programação quase certamente tem as ferramentas para permitir isso, se você aprender a usá-las como pretendem.
Em um jogo multiplayer, você provavelmente terá algum código de cliente em execução no computador do jogador. Acostume-se à idéia de que um usuário suficientemente inteligente e determinado sempre poderá comprometer esse código e fazê-lo fazer o que deseja. Não confie no cliente , se puder evitá-lo. Se você não conseguir evitá-lo, confie nele apenas na medida do necessário.
Tente não colocar todos os seus ovos em uma cesta. Se você não pode executar seu jogo, seu site e seu banco de dados em servidores separados, pelo menos execute-os em contas separadas e verifique se nenhum deles tem mais acesso um ao outro do que o necessário. OK, talvez seu jogo e seu site precisem acessar o banco de dados de usuários, mas eles certamente não precisam de acesso de administrador , não é? Talvez eles nem precisem mais do que apenas acesso de leitura a ele. Pelo menos, mesmo que você não imponha uma compartimentação tão estrita no começo, projete seu jogo para que ele possa ser instalado mais tarde - não faça com que o servidor do jogo exija acesso de administrador ao banco de dados. Lembre-se de que todo software possui bugs e, mais cedo ou mais tarde, alguém irá encontre uma falha de segurança na sua.
Em geral, o que se deve saber sobre segurança é que é uma mentalidade . Não se trata de conhecer as últimas palavras-chave de segurança, ou de como os ataques mais recentes funcionam ou de tentar antecipar o que os hackers farão antes de fazê-lo (embora todas essas coisas possam ser úteis).
A programação segura real é sobre aprender a usar as ferramentas que você tem do jeito que elas deveriam ser usadas, dividir seu código em pedaços pequenos o suficiente para que você possa entender o que cada um deles faz (e garantir que eles façam o que é certo, mesmo se outras partes estão comprometidas) e sobre como escrever seu código para esperar o inesperado. Se você fizer tudo isso, não precisará saber o que os hackers podem tentar, porque estará preparado para qualquer coisa.
fonte
Pessoalmente, eu não me preocuparia com hackers ainda .
A lógica é simples: você não receberá hackers / trapaceiros até que seja um jogo bastante popular; ou seja, vale o tempo para hackear / trapacear. Espere até que você estabeleça um jogo primeiro e receba receita para financiar esse tipo de coisa.
Você pode gastar muito (quero dizer, muito) tempo tentando enganar o seu código para que ele não possa ser invadido ou enganado. Ou você pode fazer backups externos regulares (o que você deve fazer de qualquer maneira) e criar pontos de restauração regulares. Quando ocorrer uma exploração, feche-a.
fonte