【发布时间】:2009-05-29 14:02:30
【问题描述】:
使用SqlParameters 是防止数据库查询中的SQL 注入的推荐方法。我在哪里可以找到内部清理这些参数的代码/函数?我想在我的自定义实现中重用这个函数。我尝试使用 Reflector 找到它,但没有成功。
【问题讨论】:
-
好问题 - 了解使用参数化查询提供的安全性有多深非常重要。
标签: .net sqlparameter
使用SqlParameters 是防止数据库查询中的SQL 注入的推荐方法。我在哪里可以找到内部清理这些参数的代码/函数?我想在我的自定义实现中重用这个函数。我尝试使用 Reflector 找到它,但没有成功。
【问题讨论】:
标签: .net sqlparameter
它可以防止 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 和未来的增强功能。
这巧妙地绕过了整个问题:数据就是数据,代码就是代码,两者永远不会相遇。
你对对方的评论,现已删除,回答:
如果我传入值 O'Rourke,它会将其编码为 O''Rourke,这样它就不会破坏查询。正确的?
不,这是不正确的。该变量是直接从数据块创建的,因此不需要特殊的转义或编码。
【讨论】: