代码之家  ›  专栏  ›  技术社区  ›  Josh Stodola

SqlCommand如何清理参数?

  •  10
  • Josh Stodola  · 技术社区  · 16 年前

    使用 SqlParameters 是防止数据库查询中SQL注入的推荐方法。在哪里可以找到对这些参数进行内部清理的代码/函数?我想在我的自定义实现中重用这个函数。我试图用反射器找到它,但没有成功。

    1 回复  |  直到 12 年前
        1
  •  24
  •   Joel Coehoorn    15 年前

    它可以防止SQL注入,而不是XSS,以及 没有代码或函数 这会清理参数数据。

    保护是通过将参数值与查询字符串分开传输到服务器来实现的,这样这些值就可以 从不 直接替换到sql语句中。

    SELECT * FROM [table] WHERE [column] = ParameterValue
    

    更像是它运行的是这样的东西:

    DECLARE @ParamValue int
      -- //@ParamValue variable is populated from the framework in a safe way
    SELECT * FROM [table] WHERE [column] = @ParamValue
    

    这比必须评估参数数据的函数更快、更安全、更健壮。这样一个函数需要非常复杂(读:容易出错)才能处理这样的事情 custom escape characters

    这巧妙地回避了整个问题:数据就是数据,代码就是代码,两者永远不会相遇。


    如果我传入值O'Rourke,它会将其编码为O'Rourke,这样就不会中断查询。对的

    不,那是不对的。变量是直接从数据块创建的,因此不需要特殊的转义或编码。

    推荐文章