Segurança (LINQ to DataSet)
Este tópico discute problemas de segurança em LINQ to DataSet.
Passando uma consulta a um componente não confiável
Uma consulta LINQ to DataSet pode ser formulada em um ponto de um programa e ser executada em um diferente. O ponto onde a consulta é formulada, a consulta pode fazer referência a qualquer elemento que está visível nesse ponto, como membros particulares da classe que o método de chamada pertence, ou de símbolos que representam variáveis locais/argumentos. Em tempo de execução, a consulta poderá efetivamente acessar os membros que foram referenciados pela consulta em formulação, mesmo se o código de chamada não tem a visibilidade neles. O código que executa a consulta não tem a visibilidade adicionada arbitrária, que não pode escolher o que acessar. Restrita poderá acessar o que a consulta acessa, e somente pela consulta própria.
Isso significa que passar uma referência a uma consulta para uma outra parte do código que o componente que recebe a consulta está sendo confiáveis com acesso a qualquer membros públicos e particulares que se refere a consulta. Geralmente, consultas LINQ to DataSet não devem ser passada a componentes não confiáveis, a menos que a consulta é construída cuidadosamente de modo que não expõe informações que devem ser mantidas privadas.
Entrada externo
Os aplicativos geralmente têm externo (a entrada de um usuário ou outro agente externa) e executar ações com base na entrada. No caso de LINQ to DataSet, o aplicativo pode construir uma consulta em uma determinada maneira, com base na entrada externo ou usar a entrada externo na consulta. As consultas LINQ to DataSet aceitam parâmetros em todas as partes onde literais são aceitos. Desenvolvedores de aplicativos devem usar consultas parametrizadas, em vez da o injetar literais de um agente externo diretamente na consulta.
Qualquer entrada direta ou indiretamente derivado de usuário ou um agente externa pode ter o conteúdo que aproveita a sintaxe de linguagem de destino para executar ações desautorizadas. Isso é conhecido como um ataque de injeção SQL, chamado depois que um padrão de ataque onde o idioma de destino é Transact-SQL. A entrada do usuário injetada diretamente na consulta é usada para soltar uma tabela de base de dados, causa uma negação de serviço, ou caso contrário alterar a natureza da operação que está sendo executada. Embora a composição da consulta seja possível em LINQ to DataSet, ela é executada por meio da API do modelo de objeto. Consultas LINQ to DataSet não são compostos usando a manipulação ou a concatenação de cadeia de caracteres, desde que estão em Transact-SQL, e não são suscetíveis a ataques de injeção SQL no sentido tradicional.