我非说没有-同事都说有SQL注入风险 (我说的我没)

教程大全 2025-07-12 11:00:11 浏览

前言

现在的项目,在操作数据库的时候,我都喜欢用ORM框架,其中EF是一直以来用的比较多的;EF 的封装的确让小伙伴一心注重业务逻辑就行了,不用过多的关注操作数据库的具体细节。但是在某些场景会选择执行sql语句,比如一些复杂的插入或报表查询等,其实不管用什么方式执行SQL语句,防止SQL注入是必须的,所以就有了下面的讨论。

正文

1. 先来个EF Core执行SQL演示

1.1 准备一个EF Core的项目

关于EF Core在项目中的使用,之前分享了一篇很详细的文章,这里就不重复说了,详细内容请看这里《跟我一起学.NetCore之EF Core 实战入门,一看就会》。

1.2 执行原生SQL

前提,已经生成数据库,并且有对应的表(以下只是模拟演示,并不是真实场景):

在操作数据库时,执行如下SQL:

有很多小伙伴看到这时,应该也会怀疑这里会有SQL注入的风险,因为这里的SQL语句看上去就是一个拼接的字符串,只是用了插值运算符的形式,好像没什么特别。

1.3 打印日志查看真正执行的SQL

表面看上去的确会有风险,既然说没有,那就拿出证据证明,直接把EF执行过程的日志打印出来,看看真正执行的SQL语句是什么样子;

EF Core好像在5.0之后就提供了一个便捷的配置,可以方便的打印对应的SQL记录,所以先来开启日志打印功能:

开启日志之后,执行一下程序,看看执行的真正SQL是什么样的,控制台可以看到如下日志:

可以看到,SQL语句已经参数化了,所以是没有注入风险的。那到底是为什么呢?因为ExecuteSqlInterpolatedAsync中的SQL语句参数的类型是FormattableString,EF Core内部根据FormattableString结果,将对应的字符串生成参数化的SQL语句。

2. FormattableString有点料

为了看看FormattableString的作用,建一个简单的控制台程序,看看情况,如下:

同事都说有SQL注入风险

可以看到,FormattableString中包含拼接的字符串和对应的参数,拿到这些结果,就可以构造成想要的结果了。

2.1 var使用时还是要稍微注意一下

之前一个项目,因为var的使用,线上出现一个bug,挨个看了代码感觉都没问题,而且开发和测试环境正常,但在线上就是有问题,最后通过模拟线上数据调试才搞定。大概使用如下:

之所以开发和测试环境没有问题,是没有模拟全线上环境,所以让这个bug漏掉了;对于开发来说,var用起来的确很是方便,但对于类似于上面的场景,使用具体的类型会避免一些不必要的Bug;

代码比较简单,就不提交了~~~

总结在开发过程中,稍微一个小细节的改动,可能效果就不一样;同样,一个小细节的忽视,就可能带来一个很不好排查的Bug,所以小伙伴开发过程中,一定要注意哦!!!


一上台就结巴,说不出话,是心里问题吗?

这个情况很多人都会出现,一个是很少上台、怯场,一个是紧张,不能控制自己的情绪而不知所措,所以不知不觉的成结巴了。 也可以说这是个心理问题,因为我们做什么都需要有一个好的心态,好的心理素质,所以要让自己适应这种场合和环境,只要放开了,想通了,就会坦然的面对你的受众。

一本书有84页,同学们已学过33页,甲说,剩下的页数比这本书的3分之2少5页.已说,剩下的页数比这本书

84-33=51 84×2/3-5=51——甲对的 84×4/7+3=51——乙对的 所以甲乙都说对了

公司的董事是不是由股东和职工组成的?还可能有其他人吗?那个非持股董事是不是就是说职工董事的意思?

公司的董事不是完全由股东和职工组成的(最简单的例子就是比如我是大股东占50%的股份,但是我不想做董事,于是我推荐一个外地的学者当,我投票同意了他就一定能当董事了,虽然他没有持股,但是他和我是一条心一路人,如果他不听我的,我立刻就可以申请开临时董事会和股东会换掉他)非持股董事可以是其他人,比如公司股东的亲友,比如公司的关联方(大客户或者原料供应商),比如社会上的学者教授等等,当然也可以是职工同一股份就是某个人名下的全部该公司股份,比如你有1万股,你只能选择网络投票或者现场投票中一种方式,你不能说你的5000股从网上投票,另外你再用5000股到现场投票,这样会大大增加统计难度,可能还会重复计算新股的票面金额是和原来发行的股票的票面金额要一致,如果不一致,在上市前保荐券商会把该公司的股份分拆到和新股一致的,绝对同股同权新股就是新发出来的股票,比如公司原来有1亿股,现在要发行2千万股票,这2千万股原来不存在,现在发行出来了就是新股

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐