当前位置: 首页 > article >正文

EF Core 中避免 SQL 注入的三种写法

SQL 注入攻击可能会对我们的应用程序产生严重影响,导致敏感数据泄露、未经授权的访问和应用程序受损。EF Core 提供了三种内置机制来防止 SQL 注入攻击。

1、利用 LINQ 查询语法和参数化查询,这是比较推荐的做法。

await using var context = new PostgresContext();  
var author = "江";  
var blog = await context.Blogs.Where(s=>s.Author == author + "山").FirstOrDefaultAsync();

生成的查询脚本如下:

SELECT b.author, b.blogid, b.url
FROM blog AS b
WHERE b.author = @__p_0
LIMIT 1

2、使用 FromSql

对于一些复杂的查询,需要直接使用 SQL 查询脚本的,如果是 EF Core 7.0 以上版本可以使用 FromSql。

await using var context = new PostgresContext();  
var author = "江山";
var blog = await context.Blogs.FromSql($"SELECT * FROM blog WHERE author = '{author}'").FirstOrDefaultAsync();

生成的查询脚本如下:

SELECT e.author, e.blogid, e.url
FROM (
    SELECT * FROM blog WHERE author = '@p0'
) AS e
LIMIT 1

它会自动识别字符串中的 {author} 这样的字符,用参数替换掉。

3、使用 FromSqlRaw

FromSqlRaw 也可以执行 SQL,但是需要特别注意。

先看下面的代码:

await using var context = new PostgresContext();  
var author = "江山";    
var blog = await context.Blogs.FromSqlRaw("SELECT * FROM blog WHERE author = '{0}'",author).FirstOrDefaultAsync();

生成的查询脚本如下:

SELECT e.author, e.blogid, e.url
FROM (
    SELECT * FROM blog WHERE author = '@p0'
) AS e
LIMIT 1

上面的结果是安全的。现在,把脚本改成"+"号拼接:

var blog = await context.Blogs.FromSqlRaw("SELECT * FROM blog WHERE author = '"+author+"'").FirstOrDefaultAsync();

生成的脚本如下:

SELECT e.author, e.blogid, e.url
FROM (
    SELECT * FROM blog WHERE author = '江山'
) AS e
LIMIT 1

这样就不安全了。

这就是 EF Core 中避免 SQL 注入的三种方式,希望对你有帮助。


http://www.kler.cn/news/355899.html

相关文章:

  • 前端SSR框架(Next、Nuxt)利用宝塔面板部署
  • 文生图模型
  • 【Windows】DevOps PowerShell实现读取ini文件 生成登陆凭证 发送文件到远程服务器 远程服务器执行指令 实现fabric1的基础功能
  • 【论文阅读】Bi-Mamba+: Bidirectional Mamba for Time Series Forecasting
  • Flutter 与 React Native - 详细深入对比分析(2024 年)
  • 六万字77道Spring面试题总结(2024版)
  • WPF基础权限系统
  • C++内存对齐机制简介
  • 纯css 轮播图片,鼠标移入暂停 移除继续
  • C++初阶
  • 云服务解决方案,针对小程序、网页、HTML5等轻量化视频解决方案
  • (42)MATLAB中使用fftshift绘制以零为中心的功率谱
  • Python 网络编程:端口检测与IP解析
  • OBOO鸥柏自助服务终端:开启智慧城市便民新篇章
  • 【前端学习】AntV G6-09 复杂的自定义边、边动画
  • 模块化JS + OpenAI 手搓数据分析项目
  • 力扣 83.删除排序链表中的重复元素
  • Linux 系统上生成大文件的多种方法
  • mysql操作详解
  • Linux安装 php5.6