Segurança e geração de código durante a execução

Algumas bibliotecas operam gerando código e executando-o para realizar alguma operação para o chamador. O problema básico é gerar código em nome do código de menor confiança e executá-lo em uma confiança mais alta. O problema piora quando o chamador puder influenciar a geração de código e, assim, você deve garantir que apenas o código que você considera seguro seja gerado.

Você precisa sempre saber exatamente qual código está gerando. Isso significa que você deve ter controles rigorosos sobre todos os valores obtidos de um usuário, sejam cadeias de caracteres entre aspas (que devem ser escapadas para que não possam incluir elementos de código inesperados), identificadores (que devem ser verificados para confirmar se são identificadores válidos) e tudo mais. Os identificadores podem ser perigosos porque um assembly compilado pode ser modificado para que seus identificadores contenham caracteres estranhos, o que provavelmente irá quebrá-lo (embora isso raramente seja uma vulnerabilidade de segurança).

É recomendável que você gere código com a emissão de reflexão, o que geralmente ajuda a evitar muitos desses problemas.

Ao compilar o código, considere se há alguma maneira possível de que um programa mal-intencionado possa modificá-lo. Há uma pequena janela de tempo durante a qual o código malicioso pode alterar o código-fonte no disco antes que o compilador o leia ou antes que o código carregue o arquivo .dll? Nesse caso, você deve proteger o diretório que contém esses arquivos usando uma lista de controle de acesso no sistema de arquivos, conforme apropriado.

Confira também