Beveiliging (LINQ naar DataSet)
In dit onderwerp worden beveiligingsproblemen in LINQ naar DataSet besproken.
Een query doorgeven aan een niet-vertrouwd onderdeel
Een LINQ naar DataSet-query kan worden geformuleerd in één punt van een programma en in een ander programma worden uitgevoerd. Op het punt waar de query is geformuleerd, kan de query verwijzen naar elk element dat op dat moment zichtbaar is, zoals privéleden van de klasse waartoe de aanroepende methode behoort, of symbolen die lokale variabelen/argumenten vertegenwoordigen. Tijdens de uitvoering heeft de query effectief toegang tot de leden waarnaar wordt verwezen door de query tijdens de formulering, zelfs als de aanroepende code er geen inzicht in heeft. De code die de query uitvoert, heeft geen willekeurige zichtbaarheid, omdat deze niet kan kiezen wat u wilt openen. Het heeft alleen toegang tot de query waartoe de query toegang heeft, en alleen via de query zelf.
Dit impliceert dat door een verwijzing naar een query door te geven aan een ander stukje code dat het onderdeel dat de query ontvangt, wordt vertrouwd met toegang tot alle openbare en persoonlijke leden waarnaar de query verwijst. Over het algemeen mag LINQ naar DataSet-query's niet worden doorgegeven aan niet-vertrouwde onderdelen, tenzij de query zorgvuldig is samengesteld, zodat er geen informatie wordt weergegeven die privé moet worden gehouden.
Externe invoer
Toepassingen voeren vaak externe invoer uit (van een gebruiker of een andere externe agent) en voeren acties uit op basis van die invoer. In het geval van LINQ naar DataSet kan de toepassing een query op een bepaalde manier samenstellen op basis van externe invoer of externe invoer gebruiken in de query. LINQ naar DataSet-query's accepteren parameters overal waar letterlijke waarden worden geaccepteerd. Toepassingsontwikkelaars moeten geparameteriseerde query's gebruiken in plaats van letterlijke waarden van een externe agent rechtstreeks in de query te injecteren.
Invoer die rechtstreeks of indirect is afgeleid van de gebruiker of een externe agent, kan inhoud bevatten die gebruikmaakt van de syntaxis van de doeltaal om onbevoegde acties uit te voeren. Dit wordt een SQL-injectieaanval genoemd, genoemd naar een aanvalspatroon waarbij de doeltaal Transact-SQL is. Gebruikersinvoer die rechtstreeks in de query wordt geïnjecteerd, wordt gebruikt om een databasetabel te verwijderen, een Denial of Service te veroorzaken of de aard van de bewerking die wordt uitgevoerd, op een andere manier te wijzigen. Hoewel querysamenstelling mogelijk is in LINQ naar DataSet, wordt deze uitgevoerd via de objectmodel-API. LINQ naar DataSet-query's zijn niet samengesteld met behulp van tekenreeksmanipulatie of samenvoeging, omdat ze zich in Transact-SQL bevinden en niet vatbaar zijn voor SQL-injectieaanvallen in de traditionele zin.