Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico discute problemas de segurança no 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 executada em outro. No ponto em que a consulta é formulada, a consulta pode referenciar qualquer elemento visível nesse ponto, como membros privados da classe à qual o método de chamada pertence ou símbolos que representam variáveis/argumentos locais. No momento da execução, a consulta será efetivamente capaz de acessar os membros que foram referenciados pela consulta na formulação, mesmo que o código de chamada não tenha visibilidade sobre eles. O código que executa a consulta não tem visibilidade adicionada de forma arbitrária, ou seja, não pode escolher o que acessar. Ele poderá acessar estritamente o que a consulta acessa e somente por meio da própria consulta.
Isso implica que, ao passar uma referência a uma consulta para outra parte do código, o componente que recebe a consulta está sendo confiável com acesso a todos os membros públicos e privados aos quais a consulta se refere. Em geral, as consultas LINQ to DataSet não devem ser passadas para componentes não confiáveis, a menos que a consulta tenha sido cuidadosamente construída para que ela não exponha informações que devem ser mantidas privadas.
Entrada externa
Os aplicativos geralmente usam entrada externa (de um usuário ou outro agente externo) e executam ações com base nessa entrada. No caso do LINQ to DataSet, o aplicativo pode construir uma consulta de uma determinada maneira, com base na entrada externa ou usar a entrada externa na consulta. As consultas LINQ to DataSet aceitam parâmetros em todos os lugares em que os literais são aceitos. Os desenvolvedores de aplicativos devem usar consultas parametrizadas, em vez de injetar literais de um agente externo diretamente na consulta.
Qualquer entrada derivada direta ou indiretamente do usuário ou de um agente externo pode ter conteúdo que aproveite a sintaxe do idioma de destino para executar ações não autorizadas. Isso é conhecido como um ataque de injeção SQL, que recebe o nome de um padrão de ataque em que a linguagem de destino é Transact-SQL. A entrada do usuário injetada diretamente na consulta é usada para remover uma tabela de banco de dados, causar uma negação de serviço ou alterar a natureza da operação que está sendo executada. Embora a composição de consulta seja possível no LINQ to DataSet, ela é executada por meio da API do modelo de objeto. As consultas LINQ to DataSet não são compostas usando manipulação de cadeia de caracteres ou concatenação, pois estão no Transact-SQL e não são suscetíveis a ataques de injeção de SQL no sentido tradicional.