SqlCommand如何清理参数?

时间:2009-05-29 14:02:30

标签: .net sqlparameters

使用SqlParameters是一种在数据库查询中阻止SQL注入的推荐方法。在哪里可以找到内部消毒这些参数的代码/功能?我想在我的自定义实现中重用此功能。我试图使用Reflector找到它,但没有成功。

1 个答案:

答案 0 :(得分:24)

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

保护是通过将参数值与查询字符串分开发送到服务器来完成的,因此值永远不会直接替换为sql语句。

所以代替sql server运行这样的东西:

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和未来增强之类的事情。

这个整齐的一面解决了整个问题:数据是数据,代码是代码,而不是twain应该满足。


您对其他人的评论,现已删除,回答:

  

如果我传入值O'Rourke,它会将其编码为O''Rourke,以便它不会破坏查询。正确?

不,这不正确。该变量直接从数据块创建,因此不需要特殊的转义或编码。

相关问题