gpt4 book ai didi

c# - 是否可以通过 Dynamic LINQ 进行注入(inject)?

转载 作者:IT王子 更新时间:2023-10-29 03:57:46 25 4
gpt4 key购买 nike

使用动态 LINQ 库 ( link ),是否容易受到注入(inject)攻击?以及(如果是)如何防止这种情况发生?

一些背景来自 Security Considerations (Entity Framework) :

LINQ to Entities injection attacks:

Although query composition is possible in LINQ to Entities, it is performed through the object model API. Unlike Entity SQL queries, LINQ to Entities queries are not composed by using string manipulation or concatenation, and they are not susceptible to traditional SQL injection attacks.

由于动态 SQL 是使用字符串组成的,这是否意味着它可能容易受到注入(inject)向量的影响?或者 LINQ to SQL 会根据动态 LINQ 库中的基础数据类型自动处理您的值参数化吗?

或者它是否完全安全,因为动态查询将在内存中执行而不是针对 SQL(从而抵消了 SQL 索引的任何好处)?

我一直在努力理解 DynamicLibrary.cs 代码,但我确信我很容易忽略某些东西。

因为这个问题是关于动态 LINQ 库本身的,这个问题可以被认为适用于 linq-to-sqllinq-to-entities(尽管以上引用 Entity Framework )。

最佳答案

好吧,我不同意在 Dynamic Linq 中无法进行注入(inject)。

answer 中描述的内容通过 Ɖiamond ǤeezeƦ是正确的,但适用于在给定语言(C# 或 VB.Net)中构造的标准 Linq,或者通过使用 lambda 函数调用 .Where 等扩展方法。

然后,是的,不可能注入(inject)任何东西,因为 .NET Linq to Sql 转换器当然写得很好。因此,“SQL 注入(inject)”是不可能的,这是事实。

但是,Dynamic Linq 可能发生的是“Linq 注入(inject)”攻击。在OP引用的linq安全性解释中,指出:

LINQ to Entities queries are not composed by using string manipulation or concatenation, and they are not susceptible to traditional SQL injection attacks.

基本上这是一个要点。如果查询是由字符串操作组成的,那么它很容易受到注入(inject)攻击。而Dynamic Linq实际上是由字符串组成的,因此很容易受到注入(inject)攻击。

显然,攻击者必须意识到您正在使用 DynamicLinq 并且可能只攻击准备数据,因此它会导致有效的恶意 Dynamic Linq 查询。

我想强调这个事实——最终的SQL安全组成的,但是原始的dynamic Linq是否安全取决于你

确保动态 linq 查询安全的必要条件是对所有用户输入 使用占位符。永远不要连接你的字符串!

想象一下下面的查询:

dataset.Where("allowed == 1 and code == \"" + user_entered_data + "\"");

如果输入未经过过滤且未转义,攻击者可能会输入:

200" or allowed == 0 and code == "200

这将导致:

allowed == 1 and code == "200" or allowed == 0 and code == "200"

为了避免这种情况,您应该使用占位符:

dataset.Where("allowed == 1 and code == @0", user_entered_data);

DynamicLinq 将使占位符(在这种情况下:用户输入的数据)成为 lambda 参数(而不是将其连接到查询中)并依赖于 Linq-To-Entities(或任何后端)安全地转换为 SQL。

关于c# - 是否可以通过 Dynamic LINQ 进行注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8738953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com