Not
Åtkomst till denna sida kräver auktorisation. Du kan prova att logga in eller byta katalog.
Åtkomst till denna sida kräver auktorisation. Du kan prova att byta katalog.
I det här avsnittet beskrivs säkerhetsproblem i LINQ till DataSet.
Skicka en fråga till en ej betrodd komponent
En LINQ till DataSet-fråga kan formuleras i en punkt i ett program och köras i en annan. Vid den tidpunkt då frågan formuleras kan frågan referera till alla element som är synliga vid den tidpunkten, till exempel privata medlemmar i klassen som anropsmetoden tillhör eller symboler som representerar lokala variabler/argument. Vid exekveringstid kommer frågebegäran effektivt att kunna komma åt de medlemmar som den refererade till vid formuleringen, även om den anropande koden inte har insyn i dem. Koden som kör frågan har inte godtycklig ökad synlighet, eftersom den inte kan välja vad som ska användas. Den kommer endast att kunna komma åt exakt det som frågan får tillgång till, och enbart genom frågan själv.
Detta innebär att genom att skicka en referens till en fråga till en annan kod är komponenten som tar emot frågan betrodd med åtkomst till alla offentliga och privata medlemmar som frågan refererar till. I allmänhet bör LINQ till DataSet-frågor inte skickas till ej betrodda komponenter, såvida inte frågan har konstruerats noggrant så att den inte exponerar information som ska hållas privat.
Externa indata
Program tar ofta externa indata (från en användare eller en annan extern agent) och utför åtgärder baserat på dessa indata. När det gäller LINQ till DataSet kan programmet konstruera en fråga på ett visst sätt, baserat på externa indata eller använda externa indata i frågan. LINQ till DataSet-frågor accepterar parametrar överallt där literaler accepteras. Programutvecklare bör använda parametriserade frågor i stället för att mata in literaler från en extern agent direkt i frågan.
Indata som direkt eller indirekt härleds från användaren eller en extern agent kan ha innehåll som utnyttjar syntaxen för målspråket för att utföra obehöriga åtgärder. Detta kallas för en SQL-inmatningsattack med namnet efter ett attackmönster där målspråket är Transact-SQL. Användarindata som matas in direkt i frågan används för att ta bort en databastabell, orsaka ett tjänsteavbrott eller på annat sätt ändra karaktären på åtgärden som utförs. Även om frågesammansättning är möjlig i LINQ till DataSet utförs den via objektmodell-API:et. LINQ till DataSet-frågor består inte av strängmanipulering eller sammanfogning, eftersom de är i Transact-SQL, och är inte mottagliga för SQL-inmatningsattacker i traditionell mening.