【问题标题】:Escaping SQL queries - support for different Database platforms in .Net转义 SQL 查询 - 支持 .Net 中的不同数据库平台
【发布时间】:2009-06-01 22:47:59
【问题描述】:

是否有支持将用户提供的输入转义到各种数据库系统的数据库查询的 .Net 项目/dll?

我希望我们的整个团队标准化并使用一个模块来执行用户提供的输入的转义,然后将其用于参数化 SQL 查询。

理想情况下,我想在配置文件中指定数据库系统(oracle、SqlServer、mySql 等)并能够调用 Escape(variableName),它会根据当前数据库设置转义字符串内容web.config 文件。

如果不是,那么下一个最好的东西就是 EscapeForOracle、EscapeForSqlServer 等。

项目至少应支持 Oracle、SqlServer 和 MySql。

我想知道我是否需要在内部创建此功能,或者是否存在现有的商业/开源产品来执行此操作。

【问题讨论】:

  • 你说“参数化 SQL 查询”,然后你提到转义。不知道你的意思是什么。你能举一些你想要完成的具体例子吗?如果你想走内部开发的道路,我可能有你可以使用的起始代码。
  • Lasse 是对的——如果你对所有用户提供的数据使用参数(并且不要在 SP 内构造动态 sql),你不必逃避它——这就是全部点。
  • 看起来我找到了一个做类似事情的项目:ESAPI (code.google.com/p/owasp-esapi-dotnet)。不幸的是,此时它只支持 Oracle 和 MySql,不支持 SqlServer。更多信息请访问:owasp.org/index.php/… 但我同意 - 如果您使用参数化查询 - 看起来不需要这样的东西。更多信息:owasp.org/index.php/ESAPI
  • 另外,如果我错了,请纠正我,我不能将 SqlParameters 与 DDL 语句一起使用。在这种情况下,我需要一种可以转义输入的方法。 (例如创建表或创建用户)
    例如:string qryString = "CREATE TABLE " + userSuppliedName;
    SqlConnection 连接 = new SqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString);
    SqlCommand command = new SqlCommand(qryString, connection);连接.打开();
    我将如何逃脱 qryString?

标签: .net sql database projects


【解决方案1】:

我认为你不需要这样的东西。

运行参数化查询/存储过程时,请使用参数集合。
指定适当的数据类型、长度、精度并提供有效值。
转义将由数据库提供者完成。

如果我没有正确理解您的问题,请告诉我。

【讨论】:

    【解决方案2】:

    在 .NET 中,您可以使用 DbReader 和 DbConnection 等通用类来代替 SqlConnection。就像 shahkalpesh 和 Lasse V. Karlsen 所说,您可以使用参数,框架或驱动程序将为您处理转义。

    但实际上,如果您希望同时为 Oracle 和 Sql Server 开发产品,那么您说的是主要开销。正确逃避只是冰山一角。如果你还没有安装 Oracle 和 Sql Server 测试服务器,你可能还没有开始 :)

    【讨论】:

    • 这也是我对他问题的评论的意思,他需要更清楚地说明他想要什么。如果他说的是用一组在数据库引擎中工作相同的 SQL 语句编写一个产品,那么他需要一些代码来处理这些差异。但如果他只是指“转义参数值”,而“参数”并不是真正的参数,那就不同了。
    猜你喜欢
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-24
    相关资源
    最近更新 更多