Você pensa ativamente em segurança ao codificar?

9

Quando você está codificando, você pensa ativamente que seu código pode ser explorado de maneiras que ele não deveria originalmente e, assim, obter acesso a informações protegidas, executar comandos ou algo que você não gostaria que seus usuários fizessem?

gablin
fonte
Ao codificar o que? Eu faço muitas coisas diferentes.
David Thornley
9
Sim com frequência. Geralmente em frases semelhantes a "caramba, não tenho tempo, espero que ninguém descubra".
Liori 27/11/2010

Respostas:

10

Mais ou menos. Disclaimer: Eu sou um cara de segurança;)

Portanto, a maneira como trabalho é ter meu modelo de ameaças, que descreve que tipo de ataques e que tipo de invasores são mais prováveis. Isso ajuda a elaborar os requisitos de segurança. Quando na verdade estou codificando, pratico as práticas usuais de "codificação segura", como sendo cuidadoso para que as variáveis ​​do cursor estejam sempre dentro dos limites, a entrada contaminada seja higienizada e as condições de erro sejam tratadas. Depois, volto ao meu modelo de ameaças para ver quais módulos têm mais probabilidade de serem alvo de ataques; aqueles recebem uma revisão extra.


fonte
4

Eu uso práticas padrão da indústria, como o uso de parâmetros SQL. Uso plataformas "seguras", como o .NET Framework, e aproveito os recursos de segurança, como tokens anti-falsificação no ASP.NET MVC. Não escrevo meus próprios algoritmos de criptografia, mas entendo o que essas criptografias oferecem em termos de benefícios de segurança e quando preciso usá-los para obter esses benefícios.

Em resumo, uso as melhores práticas, mas não desenvolvo minhas próprias ferramentas de segurança. Eu não sou um especialista em segurança a esse respeito; Confio em outros especialistas em segurança, que provavelmente já pensaram profundamente sobre esses problemas e têm uma compreensão clara dos riscos e benefícios.

Minha abordagem fundamental à segurança, além de simplesmente usar ferramentas de segurança, é eliminar todas as entradas possíveis no sistema, exceto a que eu estou esperando. Se eu tiver um campo de número de segurança social, os únicos caracteres que realmente devem aparecer são dígitos e traços numéricos, em um padrão específico.

Valido a entrada do usuário no cliente e no servidor.

Robert Harvey
fonte
Concordo com o uso dos recursos de segurança incorporados, mas certamente você precisa pensar em quando e como é apropriado usá-los. Devo dizer que estou preocupado com a confiança em outras pessoas para pensar em segurança para o seu produto. Eles não fizeram isso.
Michael Shaw
@Ptolemy: Quando é não apropriar para parametrizar uma instrução SQL? Quando não é apropriado usar um token antifalsificação? Se os dados forem confidenciais, quando não é apropriado usar a criptografia?
Robert Harvey
Vamos considerar a criptografia por um momento. Primeira pergunta, qual criptografia você usa? o uso de criptografia ruim fornece uma falsa sensação de segurança. Em algum momento, você precisa descriptografar os dados. Em que momento você faz isso, quais são os riscos para isso em comparação com a complexidade do código. Que proteção real a criptografia realmente oferece? O seu código de byte dll está criptografado ou a chave de criptografia pode ser lida na sua DLL? é por isso que apenas o uso de recursos com pouco ou nenhum entendimento é perigoso.
Michael Shaw
@Ptolemy: Se é isso que você quer dizer com pensar em segurança, então eu concordo, você realmente precisa saber essas coisas para usar essas ferramentas corretamente.
Robert Harvey
3

Absolutamente.

Segurança é tudo. E com software numérico, isso vale duas vezes.
Outro dia, um usuário conseguiu encontrar e explorar o bug em um dos meus programas antigos. O dano foi irreparável. Ver abaixo:

texto alternativo

Costumava ser redondo.

Torre
fonte
7
Isso precisa de mais explicações :)
Toby Allen
Dun dun dun dun ...
Mateen Ulhaq
2

Não, porque não trabalho em um domínio problemático em que a segurança é relevante (SW de visualização massiva de dados). Eu faço tem um monte de afirma no meu código (verificação de índice, a verificação de consistência, etc.), não por causa de preocupações com a segurança, mas porque eu como o código errado para travar mais cedo e bater visivelmente.

zvrba
fonte
1

Absolutamente. Penso nas vulnerabilidades de injeção, e também como minha lógica de negócios funcionará em um ambiente de desktop versus um ambiente da web, e como a segurança é implementada nos dois tipos de ambientes.

Tim Claason
fonte
1

Não sou especialista em segurança, mas quando estou codificando aplicativos da Web, sempre assumo que a entrada do usuário pode conter todo tipo de estranheza e sempre deve ser totalmente escapada e afins. Além disso, sou cuidadoso ao fazer chamadas do Ajax de volta ao servidor para verificar se o usuário está logado (se for para esse evento específico) e se eles têm permissões para fazer o que eles estão tentando fazer.

A base de código possui um conjunto de filtros para entradas. Eu nunca checo PHP $_GETou $_POSTmatrizes diretamente. Em vez disso, eu consultá-los através de uma função Request::get('parameter', 'filter')com filtros, como int, texte alguns outros. (E Request::post()para entradas do POST, é claro.)

TRiG
fonte
1

Sim. Quando trabalhei em um jogo multiplayer, todos eram paranóicos de façanhas e maneiras de trapacear. Trapacear pode destruir um jogo totalmente, sem mencionar qualquer modelo de negócio conectado à venda de itens no jogo. Portanto, as preocupações com a segurança e as medidas anti-adulteração estavam muito na agenda. Eu gostei muito disso. Já trabalhei em outros projetos antes em que você se sentia culpado por trabalhar mais no código apenas para garantir que ele era seguro.

Raio
fonte
0

Sim. A segurança é importante e não deve ser uma reflexão tardia; adicionar segurança após o fato é geralmente mais difícil do que projetá-la no aplicativo, e se você a adicionar posteriormente, provavelmente perderá algumas coisas (ou simplesmente não se importará em adicioná-la).

mipadi
fonte
0

Entenda os princípios gerais de segurança (integridade, autenticação, autoridade) e leia alguns livros sobre como as pessoas têm subvertido esses pilares de segurança há milênios e você estará na metade do caminho.

Depois, leia alguns bons livros sobre estratégias de design e teste e você aprenderá como projetar testabilidade em sua arquitetura.

Agora chegamos ao ponto em que penso em segurança. Estou pensando em como posso validar a fonte de dados, importa se os dados são adulterados, quem é a fonte de dados, qual a certeza disso? como poderia ter sido alterado etc ...

Isso afeta o design. Os arquivos de configuração podem ter seções principais criptografadas ou campos específicos podem estar em texto não criptografado com um campo de assinatura associado. As coisas ficam mais complexas com os serviços voltados para a Internet, pois você deve esperar um nível maior de hostilidade por lá.

Então, no teste, como você testa tudo isso. Quais são as entradas máximas de dados, o que acontece se você empurrar o software além desses limites, como ele lida com isso? Em que confia? como você pode fingir essa confiança?

Michael Shaw
fonte
0

Sim.

Eu lidei com hackers suficientes no passado para saber que eles estão constantemente tentando comprometer qualquer site grande, e existem bots suficientes por aí que até sites pequenos não são seguros.

Eu tento pensar como um hacker o tempo todo, até o ponto em que às vezes preocupo meus colegas de trabalho com comentários casuais sobre como os sistemas que tomamos como garantidos todos os dias podem ser utilizados.

realworldcoder
fonte
0

Deve ser algo que qualquer desenvolvedor constrói no processo desde o início até um grau maior ou menor, dependendo da aplicação etc. Infelizmente, como os desenvolvedores não tendem a citar por segurança, os compradores não costumam pensar nisso ( Eu sei, isso é um pouco complicado, porque se os compradores quiserem a cotação mais barata, talvez ela não inclua segurança)

Como desenvolvedor, você pode obter uma vantagem definitiva se tiver experiência nessa área - estou pensando especificamente em bancos e serviços financeiros, mas outros setores também são aplicáveis. Atualmente, eles podem orçar 70 - 100k em treinamento para que um novo graduado seja atualizado com rapidez nos processos, segurança e outros detalhes específicos dessa organização. Se você pode salvá-los 30k disso, é um bom CV plus!

No Reino Unido, o Instituto de Profissionais de Segurança da Informação e, na Escócia, o Centro de Excelência em Segurança e Crime Cibernético estão trabalhando em estreita colaboração com as Universidades para ajudar a revisar os materiais do curso, fornecer palestras para convidados sobre as implicações do mundo real da má codificação e facilitar as colocações de verão (por exemplo, desenvolvedores de software inseridos em divisões de fraude na aplicação da lei.) A maioria das organizações de suporte está fazendo isso de graça, pois tem o potencial de economizar uma grande quantia de dinheiro - isso me parece valioso.

(aviso de isenção de responsabilidade - fui responsável pela segurança de várias organizações globais)

Rory Alsop
fonte