使用SqlParameters
是一种推荐的方法来防止数据库查询中的SQL注入.在哪里可以找到内部消毒这些参数的代码/功能?我想在我的自定义实现中重用此功能.我试图使用Reflector找到它,但没有成功.
它可以防止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
与需要评估参数数据的函数相比,这更快,更安全,更健壮.这样的函数需要非常复杂(读取:容易出错)来处理自定义转义字符和未来增强功能.
这个整齐的一面解决了整个问题:数据是数据,代码是代码,而twain不会满足.
您对其他人的评论,现已删除,回答:
如果我传入值O'Rourke,它会将其编码为O''Rourke,这样它就不会破坏查询.正确?
不,这不正确.该变量直接从数据块创建,因此不需要特殊的转义或编码.