求一个防止SQL注入的正则表达式

wanggongming 2006-01-11 07:27:58
利用正则表达式防止SQL注入,需要在输入的字符串中查找是否有给定的危险字符

串,如下所示:
var reg=/^[^(and|or|exec|insert|select|union|update|count|*|%)]*$/;
其中的and,or,exec,insert,select,union,update,count,*,%是危险字

符串,执行的时候有错误,无论什么字符输进去都说输入不正确,如果改为var

reg=/[^(and|or|exec|insert|select|union|update|count|*|%)]/;
没有错误,但是只能检查单独的字符串,如果是混合的字符串,如SQL注入语句:

1' or 1=1/*就无法检查出来。
附:源程序
var reg=/^[^(and|or|exec|insert|select|union|update|count|*|%)]*$/; 
//表达式模板,过滤SQL注入语句,使用时根据情况动态调整内容
var str=document.searchForm.title.value;
var r = str.match(reg);
if (r==null&&str!="")
{ alert("输入语句含有不安全成分,请重新输入");
document.searchForm.title.value='';
document.searchForm.title.focus();
}
...全文
2445 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
kaijier 2006-06-13
  • 打赏
  • 举报
回复
真的一定需要把简单的事情搞复杂吗?
kaijier 2006-06-13
  • 打赏
  • 举报
回复
我的方法:
在输入字符时,只替换单引号为两个单引号
输入数字时,严格检查后,再放到SQL语句中。

欢迎指出这样做还会有什么问题。
------------------------------
这个问题我也想问!
niusr 2006-06-07
  • 打赏
  • 举报
回复
1,在服务器端检查,客户段检查没用。
2,利用PreparedStatement
3,如果是like语句,请用 escape+PreparedStatement
luoqun_ncs 2006-03-23
  • 打赏
  • 举报
回复
用存储过程
darkula 2006-03-20
  • 打赏
  • 举报
回复
PreparedStatement
xiangbo520 2006-03-20
  • 打赏
  • 举报
回复
直接用预编译不就什么事也没有了!
kairwen 2006-02-25
  • 打赏
  • 举报
回复
从你的代码来看是客户端过滤,这样没用,要在服务器端过滤
panzi667 2006-02-23
  • 打赏
  • 举报
回复
学习
topirol 2006-02-17
  • 打赏
  • 举报
回复
有经验的就说说吧 学习中~~~~
9805034 2006-01-18
  • 打赏
  • 举报
回复
单个关键字容易出现误判,建议改为匹配整条语句的形式:
如:select ..... from..........where ............order by .........
剑事 2006-01-18
  • 打赏
  • 举报
回复
JDBC本身不是支持防注入么
humanity 2006-01-15
  • 打赏
  • 举报
回复
那你还不如 for 循环来的容易控制 又 高效。
leonkim 2006-01-12
  • 打赏
  • 举报
回复
我的方法:
在输入字符时,只替换单引号为两个单引号
输入数字时,严格检查后,再放到SQL语句中。

欢迎指出这样做还会有什么问题。
wanggongming 2006-01-12
  • 打赏
  • 举报
回复
var reg=/^[^(and|or|exec|insert|select|union|update|count|*|%)]*$/;
这个语句怎么改好呀!!
pmz 2006-01-12
  • 打赏
  • 举报
回复
r!=null

256

社区成员

发帖
与我相关
我的任务
社区描述
其他产品/厂家
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧