是否可以通过动态 LINQ 进行注入?

2024-01-09

使用动态 LINQ 库(link http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx),是否容易被注入?以及(如果是)如何防止这种情况发生?

一些背景来自安全注意事项(实体框架) http://msdn.microsoft.com/en-us/library/cc716760.aspx:

LINQ to Entities 注入攻击:

尽管在 LINQ to Entities 中可以进行查询组合,但它是 通过对象模型 API 执行。与实体 SQL 查询不同, LINQ to Entities 查询不是使用字符串操作组成的 或串联,并且它们不易受到传统 SQL 的影响 注入攻击。

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

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

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

由于这个问题是关于动态 LINQ 库本身的,所以这个问题可以被认为适用于两者linq-to-sql and linq-to-entities(尽管上面引用了实体框架)。


好吧,我不同意 Dynamic Linq 中不可能进行注入。

中描述了什么answer https://stackoverflow.com/a/8740904/244353 by Ɖiamond ǤeezeƦ https://stackoverflow.com/users/909882/%C6%89iamond-%C7%A4eeze%C6%A6是正确的,但适用于在给定语言(C# 或 VB.Net)中构建的标准 Linq,或者通过调用扩展方法(例如.Where与 lambda 函数。

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

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

LINQ to Entities 查询不是通过使用字符串操作或串联来组成的,并且它们不易受到传统 SQL 注入攻击。

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

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

我想强调这个事实——决赛SQL被创作safely,但是否原创动态链接是安全的取决于你.

使动态 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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以通过动态 LINQ 进行注入? 的相关文章

随机推荐

  • 以编程方式导航到 SwiftUI 中的新视图

    描述性示例 登录屏幕 用户点击 登录 按钮 执行请求 UI 显示等待指示器 然后在成功响应后我想自动将用户导航到下一个屏幕 如何在 SwiftUI 中实现这种自动转换 成功登录后 您可以将下一个视图替换为您的登录视图 例如 struct L
  • 在焦点元素上按下转义键时不会引发按键事件

    I want to know when the Esc key is pressed on an input element On Chrome 47 0 2526 106 m the Esc key removes the focus b
  • 将 Windows Phone 8 SDK 添加到 Visual Studio 2012

    我的互联网连接非常糟糕 并且我有 Windows Phone 8 SDK 文件 但没有安装文件 有没有办法将 Windows 8 SDK 添加到 Visual Studio 而无需下载安装文件 不明白你的意思 您需要安装现有的 Visual
  • VueJS - 单击时交换组件

    在我的应用程序中 我有很多按钮 当我按下按钮时 我想加载一个模板 替换所选按钮 模板 Vue component component 1 Vue component component 2 Buttons div div
  • 哪些浏览器支持 Xpath 2.0?

    我最近一直在使用 XPath 并且一直在搜索有关哪些浏览器支持 XPath 2 0 的信息 但运气不佳 我能找到的最好的是查询技术对照表 http en wikipedia org wiki Comparison of layout eng
  • 我可以同时使用 DataContract 和 Serialized 吗?

    我正在从事 WCF 服务 我的所有类都已使用 Serializable 属性进行序列化 但由于 k BackingField 属性命名问题 我使用了 DataContract 和 DataMember 属性 所以我可以同时使用这两个属性 如
  • C# 列表和枚举器的属性

    我有以下问题 我有一个列表并将字符串项目添加到该列表中 然后我从列表中创建一个枚举器 当我用循环遍历列表时MoveNext 当我直接访问枚举器时 它会起作用 当我使用枚举器属性访问枚举器时 它不起作用 这MoveNext 命令不会增加索引
  • 将 OpenCV 与 Django 结合使用

    我想在我的 Django 应用程序中使用 OpenCV 由于 OpenCV 是一个库 我认为我们可以像任何其他库一样使用它 当我尝试使用导入它时import cv2在 Django 的视图中 它工作正常 但是当我尝试在 Django 视图中
  • 页面顶部固定浮动 div 中的 Bootstrap 警报

    我有一个使用 Bootstrap 的 Web 应用程序 2 3 2 公司政策 如果不对多个 Web 应用程序进行大量测试 我们就无法升级到 3 0 我们在此应用程序中有几个长页面需要验证表单和表格 然而 由于实用和美观的原因 我们需要在页面
  • 为什么 stripe Checkout 中没有帐单地址

    我正在使用 Stripe Checkout 进行信用卡收费 但我在弹出窗口中没有看到帐单地址 为什么他们不需要帐单地址 为什么 当我准备使用信用卡付款时 我访问的任何其他网站都会要求提供帐单地址 Stripe Checkout 中已弃用帐单
  • 以字符串形式访问对象属性并设置其值

    我有一个实例Account班级 每个帐户对象都有一个所有者 引用等 我访问帐户属性的一种方法是通过访问器 例如 account Reference 但我希望能够使用动态字符串选择器访问它 例如 account PropertyName 就像
  • 读取某些元素名称中包含“-”的 XML 提要

    我正在尝试读取元素名称中包含 的 xml feed 可以在此处找到源 我是 php 新手 所以我可能会忽略一些基本的东西 我正在使用 SimpleXML 来读取提要 这是我用来解决我的问题的一些基本代码 我阅读了预测和最低温度 没有任何问题
  • 基于 DateTime 创建自定义 GroupDescription

    我正在对一些数据进行分组 PropertyGroupDescription 在大多数情况下都工作正常 但是 如果该属性是 DateTime 并且我不想将多个日期分组为一组 例如每组 30 天或其他 我将需要一个新的 GroupDescrip
  • 字节码操作模式

    字节码操作有哪些合法用途以及人们如何在实践中实现这些基于字节码操作的解决方案 Update 我应该更清楚地表明 这个问题实际上是关于人们使用什么模式和技术在字节码操作的帮助下使他们的代码飞起来 像已经提到的面向方面的编程或动态构建代理对象和
  • 如何使用 Python 从出站 Twilio 呼叫中检索信息?

    我是 Twilio 的新手 正在尝试弄清楚如何从我使用 Python 3 成功拨打的出站呼叫中检索数据 我希望能够检索诸如收件人按下的按钮之类的信息 在阅读了一点 Twilio 文档 然后有点迷失 后 我想我了解了 Twilio 的工作原理
  • @Viewchild看不到matSort

    在我的 Angular 应用程序中 我的 ViewChild 实例无法填充 HTL matSort 我的组件 ts import MatSort from angular material export class MyClassCompo
  • 卤素键盘输入示例和取消订阅事件?

    如何取消订阅除 HandleKey 之外的其他操作的键盘事件键盘输入示例 https github com slamdata purescript halogen blob master examples keyboard input sr
  • 缓冲区溢出 - 普通用户中的 SegFaults

    下面是我的代码 包括易受攻击的程序 stack c 和我的漏洞利用程序 exploit c 这段代码适用于教授为 Windows 用户发送的预打包 Ubuntu 9 我有一个朋友在他的计算机上测试了它 但在我在 iMac 上运行的 Ubun
  • 如何从 Android 设备访问本地 REST api?

    我的计算机上本地运行着一个 spring REST api 我想使用这个 api 进行 android 开发 这是我的获取请求 public static String sendGet final String url StringBuil
  • 是否可以通过动态 LINQ 进行注入?

    使用动态 LINQ 库 link http weblogs asp net scottgu archive 2008 01 07 dynamic linq part 1 using the linq dynamic query librar