我公司前些天遇到一个问题,某同事的sql语句出现了两个负号相连的情况“--”,结果导致两个负号后边的语句失效使得数据库的数据被篡改了,给公司造成了很大的麻烦,是一个数减去一个数结果客户输入的是负数就出现了这种情况,由于系统比较老,架构不好改动只能想通过提交sql前做个校验,如果出现这种情况直接报sql语句的错,大家有没有什么好的想法,当然我的想法是通过正则表达式做一下校验,正则的大体思路就是sql语句的非单引号内的字符不能出现连着的两个减号;那位能帮忙写一下这个正则表达式,别放空炮乱讲一通,给个实实在在的答案;

解决方案 »

  1.   

    1:代码就有问题,代码中的 SQL 是使用字符串连接拼出来的,而不是使用的 PreparedStatement
    2:如果代码中使用的是 Statement 的拼接 SQL,那就有很多字符需要过滤,非常麻烦
      

  2.   

    要处理的并不单单只有“--”,如果是 Oracle 还要处理“&”,单独的“&”在 SQL 中是个变量!
      

  3.   

    确实存在这些问题,我提过用PrepareStatetment 但是框架设计的时候没有预留这些东西,这个系统的框架设计很久了大约02年设计的,如果改为PrepareStatetment 使用绑定变量的话不知道要改变多少东西,需要改动的地方就太多了,只能这么加一个验证来解决这个问题了;