【问题标题】:Insertion using ExecuteSqlRaw() method with submitted form values in entity framework使用 ExecuteSqlRaw() 方法插入实体框架中提交的表单值
【发布时间】:2022-10-24 19:21:18
【问题描述】:
原始查询插入与硬编码值一起工作正常,但我需要在 ExecuteSqlRaw() 方法中填充提交的表单值。
_context
.Database
.ExecuteSqlRaw("INSERT INTO Staff([StaffFirstName],[StaffLastName],[StaffPhoto],
[StaffDesignation],[StaffDepartment],[StaffBio])
VALUES('1','2','3' ...)");
我尝试了插值语法,但不工作
【问题讨论】:
标签:
c#
.net
entity-framework
.net-6.0
【解决方案1】:
为什么不使用实体框架中内置的附加功能?您尝试插入数据的方式为 SQL 注入攻击打开了大门
如果你想写 sql 来插入你的数据我会推荐dapper
_context.Staff.Add(staff)
【解决方案2】:
从技术上讲,要使其按原样工作,您只需省略 $""...
但是,正如@averybusinesssolutions 所说和in the documentation 所说:
永远不要传递带有未经验证的用户提供值的连接或插值字符串 ($"")
这会使您面临最广泛的攻击之一:SQL injection attack。
只需阅读文档,您将获得解决方案。使用:
ExecuteSqlRaw("INSERT INTO Staff(...) VALUE({0}...", StaffFirstName...);
代替
ExecuteSqlRaw(@"INSERT INTO Staff(...) VALUE('{StaffFirstName}'...");
应该可以工作,并且可以安全地抵御注射攻击。