【问题标题】: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}'...");
      

      应该可以工作,并且可以安全地抵御注射攻击。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-02
        • 2012-06-05
        • 1970-01-01
        • 2021-12-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多