问题:SQL 注入更改。历史代码都是${},表名、列名、动态排序等不能更改的内容不变,其他所有内容都应该更改。
背景:新公司的首要任务是改变SQL注入。所有历史SQL都是${},每次调整只能批量更改。请注意,当您检查它时,它基本上会像(${}); 中的\’%${}%\’;=${}; 一样拆分。 {}有两种可能:=${}和=\’${}\’,in可以是${};in(\’${}\’),有的人主要是通过代码。有的人只是把单引号串在中间,有的人把单引号串在两端,还有的人还把括号串在一起。已经扫描了1,900 多个问题,一一解决是不切实际的。
实现:使用idea的replace功能批量替换数据。例如,搜索in\\s*\\(\\s*\\$\\{(.*?)}\\s*\\) 并将其替换为:在。
foreach item=\’item\’ collection=\’$1.split(\’,\’)\’ open=\'(\’separator=\’,\’ close=\’)\’
替换(#{项目},\’\’\’\’)
/foreach
请注意,您需要检查常规匹配。 in\\s*\\(\\s*\\$\\{(.*?)}\\s*\\) 表示in+any space+(+any space+${+matching group+}+any ) Space +) 将包含匹配组在()中,替换时可以使用$1来获取该值。如果需要多个匹配组,可以用$1 替换它们,然后用$2 替换,然后使用Replace 剪切出一组。将传递的参数括在引号中。这确保了前端和后端交互中没有单引号,并且所有特殊字符都被删除。 Replace替换了MySQL,但默认不支持空(当时用Oracle测试截图;如果Oracle不写,则默认为空)。所以你必须把它写成replace(#{},\’\’)。 \’\’,\’\’) 和单引号两次。这意味着将字符串中的单引号更改为空。
这个基本上可以批量替换。另一件需要注意的是sql标签有一个名为“STATEMENT”的属性。在这种情况下,将${}更改为#{意味着不接受输入参数。 } 报告错误。该属性可以删除
以上关于#Batch处理SQL注入问题的相关内容摘自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93202.html