11

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

4

1 回答 1

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

这比必须评估参数数据的函数更快、更安全、更健壮。这样的功能需要非常复杂(阅读:容易出错)才能处理自定义转义字符和未来增强功能。

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


您对另一个(现已删除)的评论回答:

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

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

于 2009-05-29T14:06:06.853 回答