使用SqlParameters
是一种在数据库查询中阻止SQL注入的推荐方法。在哪里可以找到内部消毒这些参数的代码/功能?我想在我的自定义实现中重用此功能。我试图使用Reflector找到它,但没有成功。
答案 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,以便它不会破坏查询。正确?
不,这不正确。该变量直接从数据块创建,因此不需要特殊的转义或编码。