NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Entity Framework 中的字符串插值引发担忧

  • 2017-09-21
  • 本文字数:910 字

    阅读完需:约 3 分钟

将内插字符串(Interpolated Strings)自动地转化为参数化 SQL 语句,这是 Entity Framework Core 2 提供的一个新特性。虽然该特性从设计上是为了避免出现 SQL 语句编写上的问题,但是有人担心这会导致更多的 SQL 注入攻击。

下面给出一个正确工作的字符串插值例子:

复制代码
var city = "Redmond";
context.Customers.FromSql($"SELECT * FROM Customers WHERE City = {city}");
SELECT * FROM Customers WHERE City = @p0a

我们对此稍作更改,下面的代码就不工作了:

复制代码
var city = "Redmond";
var sql = $"SELECT * FROM Customers WHERE City = {city}";
context.Customers.FromSql(sql);
SELECT * FROM Customers WHERE City = Redmond

这是因为后者将表达式存储在本地变量中,这一简单操作完全地更改了代码的行为。

为推本溯源,我们需要理解 C#中“$"”表达式的事实真实行为。乍一看,表达式仅是将内插字符串转换为一个正常的String.Format调用。但事实上,它还做了一些额外的工作。

本质上,“$"”表达式是 FormattableString 的一个子类。对象中包含字符串格式化表达式以及所有需要填充的值。对象在传递给 EF Core 的 FromSql(FormattableString) 方法后,会执行必要的替换,并得到了参数化的 SQL 表达式。

问题在于,编译器并不愿意直接操作 FormattableString。除非我们将“$"”表达式直接指定为一个 FormattableString 类型的变量或参数,否则表达式将立刻被转换为字符串。在正常情况下,这是一种良性更改,因为我们希望最终能给出字符串格式。

不幸的是,在 EF Core 中,会丢失全部有意义的信息,Entity Framework 使用这些信息对 SQL 语句参数化。此外一旦发生错误,EF Core 并不会给出任何编译器告警或是其它的指示信息。因此如果开发人员试图“清理”代码,这类软件缺陷就很容易混入到应用中。

如要深入了解 EF Core 使用字符串插值可导致 SQL 注入攻击这一问题,可从 GitHub 下载 Nick Craver 给出的“EFCoreInjectionSample”例子代码,也可以看一下他发布在 ASP.NET Monster 上的一个幻灯片,名为“ EF Core 2.0 中的 SQL 注入攻击”(SQL Injection attacks in Entity Framework Core 2.0)。

查看英文原文: String Interpolation in Entity Framework Raises Concerns

2017-09-21 19:001825
用户头像

发布了 391 篇内容, 共 127.1 次阅读, 收获喜欢 256 次。

关注

评论

发布
暂无评论
发现更多内容

Comsol Multiphysics for Mac(物理数值模拟仿真软件)v6.2中文激活版

iMac小白

CameraBag Pro for Mac(专业的图像处理工具)v2024.0.1激活版

iMac小白

云服务器入门指南:你需要知道的基础知识与选择策略

一只扑棱蛾子

云服务器

【网易云商】构建高效 SaaS 系统的技术要点与最佳实践

网易云信

SaaS 平台

拒绝连锡!3种偷锡焊盘轻松拿捏

华秋电子

PCBA

IBM SPSS Statistics Mac(spss专业统计分析软件) v27.0.1.0中文激活版

iMac小白

DreamPlan Plus for Mac(房屋装修设计)v8.61激活版下载

iMac小白

欢迎提报 | 2023年龙蜥社区优秀贡献者评选正式启动

OpenAnolis小助手

操作系统 创新 龙蜥社区 优秀贡献者

大型企业资金管理常见6个难题,用友Fast by BIP“快速”破解

用友BIP

资金管理

springboot集成工作流实例分享(源码)

金陵老街

低代码平台提升软件开发效率

互联网工科生

软件开发 低代码 JNPF

开源大模型驱动的智能编程与自然语言处理

百度开发者中心

nlp 大模型 LLM

WebSocket 鉴权实战经验分享

Liam

程序员 前端 后端 网络协议 websocket

如何调用电商API接口获取相关商品的推荐列表?

技术冰糖葫芦

API API 文档

sublime text for Mac(代码编辑器)v4.0(4169)注册汉化版

iMac小白

线上ES集群参数配置引起的业务异常案例分析

EquatorCoco

搜索引擎 数据 集群 异常测试

SRM采购招投标一体化系统(源码)

金陵老街

招投标 SRM系统 采购系统 供应商管理系统

如何使用电商平台API接口?

技术冰糖葫芦

API API Gateway API 文档

最强模型GPT-4 Turbo来了,程序员会失业吗?

伤感汤姆布利柏

人工智能 低代码 chatpt GPT-4 Turbo

GitKraken for Mac(跨平台Git客户端)v9.10.0激活版下载

iMac小白

耐世特与Tactile Mobility合作的路面探测与早期预警软件获创新奖

财见

Timemator for Mac(自动化时间跟踪软件) 3.0.4汉化激活版

mac

苹果mac Windows软件 Timemator 时间跟踪软件

uni-app 打包ios上架app store流程

Redis桌面管理工具: Redis Desktop Manager for Mac中文激活版下载

iMac小白

uniapp打包的ipa上架到appstore的傻瓜式教程

雪奈椰子

数字化供应链助力电子产业高质量发展,华秋2023电子设计与制造技术研讨会成功举办!

华秋电子

PCB设计

After Effects 2024 for Mac(AE2024视频特效)v24.0.3中文版

mac

苹果mac Windows软件 视频处理软件 After Effects 2024 AE2024

uniapp打包的ipa上架到appstore的傻瓜式教程

雪奈椰子

基于低代码平台搭建应用程序

树上有只程序猿

软件开发 低代码 JNPF

CAKE OF FORTUNE(蛋糕矿工)BSC链系统开发

l8l259l3365

特斯拉开源 Roadster 文件随便用;微软 Copilot AI 技术开放或不对大陆开放丨 RTE 开发者日报 Vol.92

声网

Entity Framework中的字符串插值引发担忧_.NET_Jonathan Allen_InfoQ精选文章