Considerações de segurança para JScript
Escrevendo código seguro é um desafio em qualquer idioma. JScriptinclui algumas áreas onde os desenvolvedores podem inadvertidamente usar a linguagem de forma insegura porque o idioma não força os desenvolvedores usem as práticas mais eficazes. Embora JScript foi projetada com a segurança como um objetivo, seu objetivo principal é promover o desenvolvimento rápido de aplicativos úteis. Em alguns casos, essas duas metas são em oposição.
Se você estiver ciente dos problemas potenciais em várias áreas importantes que estão listados abaixo, você pode evitar problemas de segurança. Essas considerações de segurança, exceto o eval método, devido a nova funcionalidade que o .NET Framework introduz.
O método eval
O recurso mais facilmente mal utilizado do JScript é o eval método, que permite a execução dinâmica de JScript código de origem. Porque um JScript aplicativo que usa o eval método pode executar qualquer código que passa de um programa dele, todas as chamadas para o eval método representa um risco de segurança. A menos que seu aplicativo requer a flexibilidade de executar qualquer código, considere a possibilidade de escrever explicitamente o código que o aplicativo passa para o eval método.
Atributos de segurança
Os atributos de segurança da .NET Framework pode ser usado para explicitamente substituem as configurações de segurança padrão do JScript. No entanto, os padrões de segurança não devem ser modificados, a menos que você sabe exatamente o que está fazendo. Em particular, é a única coisa que não deve ser aplicada a AllowPartiallyTrustedCallers o atributo de atributo personalizado de (APTCA) porque não confiável chamadores com segurança não é possível chamar JScript código, em geral. Se você criar um assembly confiável com o APTCA, em seguida, é carregado por um aplicativo, um chamador parcialmente confiável poderia acessar assemblies totalmente confiáveis no aplicativo. Para obter mais informações, consulte Diretrizes para Codificação Segura.
Código parcialmente confiável e hospedado JScript
O mecanismo que hospeda JScript permite que qualquer código de chamada modificar partes do mecanismo, como variáveis globais, variáveis locais e as cadeias de protótipos de objeto. Além disso, qualquer função pode modificar as propriedades de expando ou métodos de qualquer objeto expando passado para ele. Conseqüentemente, se um JScript aplicativo chama o código parcialmente confiável ou se ele é executado em um aplicativo com outro código (como de dentro de um Visual Studio para o host de aplicativos [VSA]), o comportamento do aplicativo pode ser modificado.
Uma conseqüência disso é que qualquer JScript código em um aplicativo (ou em uma instância de um AppDomain classe) deve ser executado em um nível de confiança não maior que o resto do código do aplicativo. Caso contrário, o outro código pode manipular o mecanismo para a JScript classe, que por sua vez poderia modificar os dados e afetar o outro código no aplicativo. Para obter mais informações, consulte _AppDomain.
Acesso de assembly
JScriptpode fazer referência a assemblies usando nomes de texto simples e de nomes fortes. Uma referência de nome forte inclui as informações de versão do assembly, bem como uma assinatura criptográfica que confirma a integridade e a identidade do assembly. Embora seja mais fácil de usar um nome simples para se referir a um assembly, uma ajuda de nome forte para proteger seu código caso outro assembly em seu sistema tem o mesmo nome simple, mas a funcionalidade diferente. Para obter mais informações, consulte Como: Fazer referência a um Assembly de nome forte.
Threading
O JScript em tempo de execução não é projetado para ser thread-safe. Conseqüentemente, multithread JScript código pode ter comportamento imprevisível. Se você desenvolver um conjunto de JScript, tenha em mente que pode ser usada em um contexto multithread. Você deve usar as classes a partir do System. Threading namespace, como o Mutex classe, para garantir que o JScript código no assembly será executado com a sincronização adequada.
Como o código de sincronização adequada é difícil escrever em qualquer idioma, você não deve tentar escrever assemblies de uso gerais em JScript a menos que tenha um bom entendimento de como implementar o código de sincronização necessária. Para obter mais informações, consulte System.Threading.
Observação |
---|
Você não precisará escrever um código de sincronização para ASP.NET aplicativos escritos em JScript porque ASP.NET gerencia a sincronização de todos os threads ele gera. No entanto, Web controles escritos JScript deve conter o código de sincronização, pois elas se comportam como assemblies. |
Erros de tempo de execução
Porque JScript é uma linguagem rigidez, é mais tolerante a falhas de possíveis incompatibilidades de tipos de outros idiomas, como Visual Basic e Visual C#. Como a incompatibilidade de tipo pode causar erros em tempo de execução em aplicativos, é importante descobrir possíveis incompatibilidades de tipos, à medida que você desenvolve o código. Você pode usar o /warnaserror sinalizador com o compilador de linha de comando ou o warninglevel atributo da @ Page diretiva em ASP.NET páginas. Para obter mais informações, consulte /warnaserror e @ Page.
Modo de compatibilidade
Assemblies cumpriu no modo de compatibilidade (com o /fast- opção) são criptografados por menos daqueles compilado no modo rápido (o modo padrão). O /fast- opção habilita os recursos de idioma que não estão disponíveis por padrão, mas são necessárias para compatibilidade com scripts escritos para JScript versão 5.6 e anterior. Por exemplo, expando propriedades podem ser adicionadas dinamicamente ao objetos intrínsecos, como o String o objeto, no modo de compatibilidade.
Modo de compatibilidade é fornecido para ajudar os desenvolvedores a criar os executáveis autônomos de legacy JScript código. Ao desenvolver novos executáveis ou bibliotecas, use o modo padrão. Não apenas isso ajuda a proteger os aplicativos, mas também ajuda a fornecer um melhor desempenho e uma melhor interação com outros assemblies. Para obter mais informações, consulte /rápido.
Consulte também
Conceitos
Atualizando aplicativos criados em versões anteriores do JScript