代码之家  ›  专栏  ›  技术社区  ›  Amy

SQL参数如何在内部工作?

  •  2
  • Amy  · 技术社区  · 15 年前

    我和一个同事在浏览,所以当我们遇到一个关于SQL注入的问题时,我们不禁想:参数化查询如何在内部工作?您正在使用的API(假设它支持参数化查询)是否执行连接,将查询与参数结合起来?或者,参数是否使其与查询分离到SQL引擎,并且根本不执行连接?

    谷歌并不是很有帮助,但也许我们没有找到合适的东西。

    4 回复  |  直到 15 年前
        1
  •  5
  •   Alex Reitbort    15 年前

    这些参数使它独立于查询进入SQL引擎。执行计划计算或 再利用 对于参数化的查询,然后由SQL引擎使用参数执行查询。

        2
  •  1
  •   mjv    15 年前

    参数使它完整地到达SQL Server,并单独“打包”,其中包含指示其类型、输入或输出等的元数据。正如Alex Reitbort指出的那样,这是因为参数化语句是服务器级概念,而不仅仅是从不同连接层调用命令的方便方法。

        3
  •  1
  •   KM.    15 年前

    我怀疑SQL Server是否从给定的参数化查询(其中参数列表连接在一起)中构建完整的查询字符串。

    它很可能解析给定的参数化命令字符串,将其拆分为基于保留字和符号(select、from、“,”,“+”等)的内部数据结构。在该数据结构中,表名、文本等值有属性/位置。在这里,它将(逐字)每个传入参数(从列表)复制到该结构的适当部分。

    所以您的@username值为: 'x';从用户中删除--

    在“不”中,不需要转义,只需将其用作实际值。

        4
  •  0
  •   yfeldblum    15 年前

    参数随查询一起传递(不在查询中),并在根据基础数据库通信协议发送时由API自动转义。

    例如,您可能

    Query: <<<<select * from users where username = :username>>>>
    Param: <<<<:username text<<<<' or '1' = '1>>>>>>>>
    

    这并不是任何数据库协议实际使用的确切编码,但您可以理解。