Geração de código de segurança e o sistema em funcionamento
Algumas bibliotecas operam gerando o código e executá-lo para realizar alguma operação para o chamador. O problema básico é gerar código em nome de código menos confiável e executá-lo em uma relação de confiança maior. O problema worsens quando o chamador pode influenciar a geração de código, portanto, você deve garantir que somente o código que você considera seguro é gerado.
Você precisa saber exatamente o código que você está gerando em todos os momentos. Isso significa que você deve ter controles rígidos sobre quaisquer valores que você obtém de um usuário, sejam eles strings entre a cotação (o que devem haver escape de modo que eles não podem incluir elementos de código inesperado), identificadores (que devem ser verificados para verificar se eles são identificadores válidos), ou qualquer outra coisa. Identificadores podem ser perigosos porque um assembly compilado pode ser modificado para que os seus identificadores que contêm caracteres estranhos, o que serão provavelmente dividi-la (embora isso raramente é uma vulnerabilidade de segurança).
É recomendável que você gera o código com reflexo emit, que geralmente ajuda você a evitar muitos desses problemas.
Quando você compila o código, considere se há alguma forma de que um programa mal-intencionado pode modificá-lo. Há uma pequena janela de tempo durante o qual código mal-intencionado pode alterar o código-fonte no disco antes do compilador lê-la ou antes que seu código carrega o arquivo. dll? Nesse caso, você deve proteger o diretório que contém esses arquivos usando code access security ou uma lista de controle de acesso no sistema de arquivos, conforme apropriado.
Se um chamador pode influenciar o código gerado de maneira que faz com que um erro do compilador, uma vulnerabilidade de segurança também pode existir de lá.
Executar o código gerado com as configurações de permissão possível menor, usando PermitOnly ou Negar.