Segurança e geração de código em tempo real
Algumas bibliotecas operam gerando código e executando-o para executar alguma operação para o chamador. O problema básico é gerar código em nome de código de menor confiança e executá-lo em uma confiança mais alta. O problema piora quando o chamador pode influenciar a geração de código, então você deve garantir que apenas o código que você considera seguro seja gerado.
Você precisa saber exatamente qual código você está gerando em todos os momentos. Isso significa que você deve ter controles rigorosos sobre quaisquer valores que você obtém de um usuário, sejam eles 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 verificar se são identificadores válidos) ou qualquer outra coisa. Os identificadores podem ser perigosos porque um assembly compilado pode ser modificado para que seus identificadores contenham caracteres estranhos, o que provavelmente o quebrará (embora isso raramente seja uma vulnerabilidade de segurança).
Recomenda-se que você gere código com emissão de reflexo, o que muitas vezes ajuda a evitar muitos desses problemas.
Ao compilar o código, considere se há alguma maneira de um programa mal-intencionado modificá-lo. Existe uma pequena janela de tempo durante a qual o código mal-intencionado pode alterar o código-fonte no disco antes que o compilador o leia ou antes que seu código carregue o arquivo .dll? Em caso afirmativo, você deve proteger o diretório que contém esses arquivos, usando uma Lista de Controle de Acesso no sistema de arquivos, conforme apropriado.