【发布时间】:2011-05-05 09:09:42
【问题描述】:
我们有大量依赖动态 SQL 的 SQL Server 存储过程。
存储过程的参数用于动态 SQL 语句。
我们需要在这些存储过程中使用标准验证函数来验证这些参数并防止 SQL 注入。
假设我们有这些约束:
我们无法重写过程以不使用动态 SQL
我们不能使用 sp_OACreate 等来使用正则表达式进行验证。
我们不能修改调用存储过程的应用程序在参数传递给存储过程之前对其进行验证。
是否有一组字符我们可以过滤掉以确保我们不会受到 SQL 注入的影响?
【问题讨论】:
-
哎哟。通常是 3) 应该修改它以防止 SQL 注入。请记住,这是“SQL 注入”,而不是“SQL 拒绝”。一旦它到达数据库,它应该已经被清理了。但是如果你说你不能改变应用程序,那么我猜你不能。有兴趣看看答案。
标签: sql-server validation stored-procedures sql-injection dynamic-sql