我构建的框架允许应用程序编码器动态创建sql(当需要时)。如果他们正确使用该工具,那么他们将分两步进行:1。使用'?'构建sql(PreparedStatement)占位符,以及2.将所有用户输入的数据作为参数传递给PreparedStatement。
这只是使用PreparedStatement和params的常用方法,以避免sql注入。没什么特别的。
但是,我想更进一步:我想验证编码器是否已正确“参数化”。在什么意义上可能,如果可能的话?一个人可以在句法上确定所有“?”的地方应出现在SQL中?这样的工具是否已经存在?
编辑: 例如:
从x中选择blah 其中a ='用户数据' 和b =?
这里,a没有被参数化,而b有。我想检测'a'那种格式错误的sql。这有意义吗?
答案 0 :(得分:1)
首先,你的一些场所存在缺陷 即
如果你不信任你的开发者那么多 - 有两种可能的万无一失的解决方案,以降低他将SQL用于某些有限子集的能力为代价:
我们的想法是限制您的开发人员只使用这些基于沙盒的解决方案(尽管如此,如果这样的限制可以开箱即可,请不要这样做。)
上述解决方案更接近您最初的想法和可行。