当前位置: 首页 > 面试题库 >

C#安全地构建一个SQL字符串以使用实体框架执行

戚阳
2023-03-14
问题内容

我正在通过.SqlQuery(string sql)命令使用EF执行一些SQL 。

我想确保我的sql字符串完全干净,因此逻辑方法是使用SqlCommand带有参数的对象来构建它。

但是我不想使用SqlCommand来执行它,我只是想让SqlCommand吐出一个可以插入到EF.SqlQuery(...)调用中的字符串。

有没有办法做到这一点,或者有另一种确保我.SqlQuery不会注射的方法?


问题答案:

EF是否不开箱即用?

您应该能够SqlQuery使用参数进行调用,因此它将像SqlCommand处理SQL注入一样处理:

var tests = context.Database.SqlQuery<Test>(
    @"SELECT Id, Name FROM tests where Name={0}", "TestName");

或者..

var tests = context.Database.SqlQuery<Test>(
    @"SELECT Id, Name FROM tests where Name=@name", 
    new SqlParameter("@name", "TestName"));


 类似资料:
  • 后来呢: 我从多个并发线程调用这样的代码来运行不同的查询…(在。NET Core3.0控制台应用程序中) 问题: 谢了!

  • 问题内容: 这是表 用户数 和代码.. 问题答案: Ladislav的答案已更新为使用DbContext(在EF 4.1中引入):

  • 我正在给我的Azure API应用程序添加一个SQL数据库。我有一个空的SQL数据库,我通过portal.azure.com单独创建。我的问题是我不知道如何设置连接字符串,以便我的应用程序使用Azure数据库。 我已经阅读了代码优先迁移的文章,但仍停留在部署阶段。我无法在项目中的任何文件中看到任何连接配置。 如何将连接字符串设置为在 Azure 中部署应用时使用? 更多信息: 准确地说,我可以看到

  • 我们正在启动一个新应用程序。我们想使用实体框架。我们几乎不怕意外删除sql行(尤其是意外设置相关数据等) 我想禁用每一次删除,因为我们只是用“validUntil”列标记每一行,而从不删除行。 我看到它可以通过sql中的角色来完成,但我希望所有逻辑和控制都只在代码中。 也许在实体框架核心中有新的特性来支持这一点?我知道它仍然可以用EF编写行sql,但我们并不害怕这种情况。 我还尝试删除实体关系的s

  • 大部分当前web浏览器使用一种将用户和网络结合成一个单一保护域的单片结构。在这样的浏览器中,攻击者可以利用任意代码执行漏洞,盗取敏感信息或者安装恶意软件。在这篇文章里,我们展示了Chromium的安全架构。Chromium有着两个处于独立保护域 的模块:一个是浏览器内核,与操作系统交互,一个是渲染引擎,运行在只有限制权限的沙箱中。这种架构有助于减少高危攻击,而不牺牲与现有网站的兼容性。我们为浏览器

  • 问题内容: 我有一个 特殊情况, 要求我根据用户提供的输入值生成SQL WHERE子句的一部分。我想防止任何形式的SQL Injection漏洞。我想出了以下代码: 问题: 看到任何问题吗? 您能提供更好的解决方案吗? 是否有现有的库可以帮助您解决此问题? 笔记: 这是SO和其他地方的常见问题,但是我看到的唯一答案是始终使用PreparedStatements。Fwiw,我正在使用JasperRe