Dela via


Säkerhet (LINQ till DataSet)

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 körningen kommer frågan effektivt att kunna komma åt de medlemmar som refererades till av frågan 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 att kunna komma åt det som frågan kommer åt, och endast via själva frågan.

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 släppa en databastabell, orsaka överbelastning eller på annat sätt ändra typen av åtgärd 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.

Se även