【发布时间】:2011-10-05 21:02:13
【问题描述】:
我想构建一个可以处理多个 WHERE 子句的安全动态选择语句。
例如,基本 SQL 如下所示:
SELECT * FROM Books Where Type='Novel'
我会传递这样的函数:
SafeDynamicSQL("author,=,Herman Melville","pages,>,1000");
这会清理输入并像这样连接:
SELECT * FROM Books Where Type='Novel' AND author=@author AND pages>@pages
该函数将通过检查一组预定义的列名来清理列名。运算符只能是 >,
这仍然容易受到 SQL 注入的攻击吗?
会有一些字符串操作和小循环会影响性能,但我的想法是,与平均需要 200 毫秒的请求相比,这将只需要几毫秒。如果这些请求大约每秒发出一次,这会对服务器造成比我想象的更多的负担吗?
我知道这无论如何都不是最佳实践,但它会大大加快开发速度。请告诉我这可能是个坏主意的任何其他原因。
【问题讨论】:
标签: sql performance security dynamic-sql