以前处理单引号都是对每个参数进行逐个替换 replace("'","''"),感觉比较麻烦现在想在SQL语句组合完后,利用正则直接替换组合完毕的SQL语句,岂不是很方便也搜索了这方面的资料,找到了一个C#下的正则,没环境,不知道能不能用,现在想要个普通的正则,不知道能不能实现思索许久,无果直接上个复杂的吧比如把下面的SQL语句:
select * from [test] where [text1] like '% a ' , % ' . b ' c %' and [text2]=' a ' , % ' . b ' c 'insert into [test]([text1],[text2]) values (' a ' , % ' . b ' c ',' a ' , % ' . b ' c ')
替换成:
select * from [test] where [text1] like '% a '' , % '' . b '' c %' and [text2]=' a ' , % ' . b ' c 'insert into [test]([text1],[text2]) values (' a '' , % '' . b '' c ',' a '' , % '' . b '' c ')
红色标注的单引号是SQL的标识符,其它单引号统统替换成双引号,貌似有点复杂了。还请高人指点

解决方案 »

  1.   

    诶,这个是复杂了点~
    SQL是不是还有update、delete等啊,参数会不会出现在select后面呀,这个很多不确定性啊。
      

  2.   

    你要防止注入,光靠javascript显然不够,提交数据完全可以不用浏览器。
    前端判断只是降低服务器的网络压力,但关键的逻辑判断还是要靠服务器。
      

  3.   


    我只是要个正则,没说用Javascript去判断SQL语句,谢谢!
      

  4.   

    一推单引号,哪个在里面,哪个在外面,有什么规律?
    insert into [test]([text1],[text2]) values (' a ' , % ' . b ' c ',' a ' , % ' . b ' c ') 碰到这类情况如何处理?
    insert into [test]([text1],[text2]) values ('a',',',',',',') 
      

  5.   

    还是转换下参数值比较简单,你这个肯定不行比如
    SELECT * FROM [aa] WHERE A LIKE '%A' AND B LIKE 'B%'
    SELECT * FROM [bb] WHERE A LIKE '%A' AND B LIKE 'B%'到这个程度了,怎么可能区分是两个子条件,还是"%A' AND B LIKE 'B%" 整个是一个条件字符串,
    万一我上面一句是两个条件,下面是单个字符串条件,程序根本不可能知道哪个是你想要的结果
      

  6.   

    没有意义的事情,做一个工具自动生成相应的表的Sql就好了
      

  7.   

    SQL安全啊~
    哎捞上长谈的东西