如何java 防止sql注入网站被SQL注入攻击之java网站安全部

java web中防止sql注入
1.下图中是整个思路:
2.下面代码简单的判断了是否存在sql关键字,可自己重写复杂高性能的算法实现。
//取得本次请求request中的参数
Map&String, String[]& paramMap = request.getParameterMap();//参数keySet&String& keySet = paramMap.keySet();for (String key : keySet) {//参数valueString[] paramValue = paramMap.get(key);for (String value : paramValue) {//设定sql关键字,并比对用户输入的值是否是sql关键字,如果是提示用户,反之亦然String[] sqlArr = new String[]{"select","delete","from","update"};for (String sql : sqlArr) {//判断value是否包含sql的关键字,//.......................}System.out.print(value+",");}
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!万万没想到,我最终还是。。。。。。。
java持久层框架mybatis如何防止sql注入
sql注入大家都不陌生,是一种常见的攻击方式,攻击者在界面的表单信息或url上输入一些奇怪的sql片段,例如“or ‘1’=’1’”这样的语句,有可能入侵参数校验不足的应用程序。所以在我们的应用中需要做一些工作,来防备这样的攻击方式。在一些安全性很高的应用中,比如银行软件,经常使用将sql语句全部替换为存储过程这样的方式,来防止sql注入,这当然是一种很安全的方式,但我们平时开发中,可能不需要这种死板的方式。
mybatis框架作为一款半自动化的持久层框架,其sql语句都要我们自己来手动编写,这个时候当然需要防止sql注入。其实Mybatis的sql是一个具有“输入+输出”功能,类似于函数的结构,如下:
&select id=“getBlogById“
resultType=“Blog“
parameterType=”int”&
select id,title,author,content
from blog where id=#{id}
这里,parameterType标示了输入的参数类型,resultType标示了输出的参数类型。回应上文,如果我们想防止sql注入,理所当然地要在输入参数上下功夫。上面代码中高亮部分即输入参数在sql中拼接的部分,传入参数后,打印出执行的sql语句,会看到sql是这样的:
id,title,author,content from blog where id = ?
不管输入什么参数,打印出的sql都是这样的。这是因为mybatis启用了预编译功能,在sql执行前,会先将上面的sql发送给数据库进行编译,执行时,直接使用编译好的sql,替换占位符“?”就可以了。因为sql注入只能对编译过程起作用,所以这样的方式就很好地避免了sql注入的问题。
mybatis是如何做到sql预编译的呢?其实在框架底层,是jdbc中的PreparedStatement类在起作用,PreparedStatement是我们很熟悉的Statement的子类,它的对象包含了编译好的sql语句。这种“准备好”的方式不仅能提高安全性,而且在多次执行一个sql时,能够提高效率,原因是sql已编译好,再次执行时无需再编译。
话说回来,是否我们使用mybatis就一定可以防止sql注入呢?当然不是,请看下面的代码:
&select id=“orderBlog“
resultType=“Blog“
parameterType=”map”&
select id,title,author,content
from blog order by ${orderParam}
仔细观察,内联参数的格式由“#{xxx}”变为了${xxx}。如果我们给参数“orderParam”赋值为”id”,将sql打印出来,是这样的:
select id,title,author,content from
blog order by id
显然,这样是无法阻止sql注入的。在mybatis中,”${xxx}”这样格式的参数会直接参与sql编译,从而不能避免注入攻击。但涉及到动态表名和列名时,只能使用“${xxx}”这样的参数格式,所以,这样的参数需要我们在代码中手工进行处理来防止注入。
结论:在编写mybatis的映射语句时,尽量采用“#{xxx}”这样的格式。若不得不使用“${xxx}”这样的参数,要手工地做好过滤工作,来防止sql注入攻击。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!网站已被SQL注入攻击,求解决方案,急!
[问题点数:50分]
本版专家分:0
结帖率 95%
CSDN今日推荐
本版专家分:53518
2012年11月 其他数据库开发大版内专家分月排行榜第一
2010年6月 其他数据库开发大版内专家分月排行榜第二2010年6月 Oracle大版内专家分月排行榜第二2010年5月 其他数据库开发大版内专家分月排行榜第二
2011年1月 其他数据库开发大版内专家分月排行榜第三2010年12月 其他数据库开发大版内专家分月排行榜第三
本版专家分:105414
2017年6月 其他数据库开发大版内专家分月排行榜第一2017年2月 其他数据库开发大版内专家分月排行榜第一2013年11月 其他数据库开发大版内专家分月排行榜第一2013年9月 其他数据库开发大版内专家分月排行榜第一2013年2月 其他数据库开发大版内专家分月排行榜第一
2018年2月 其他数据库开发大版内专家分月排行榜第二2018年1月 其他数据库开发大版内专家分月排行榜第二2017年12月 其他数据库开发大版内专家分月排行榜第二2017年11月 其他数据库开发大版内专家分月排行榜第二2017年1月 其他数据库开发大版内专家分月排行榜第二2014年8月 其他数据库开发大版内专家分月排行榜第二2014年2月 其他数据库开发大版内专家分月排行榜第二2014年1月 其他数据库开发大版内专家分月排行榜第二2013年12月 其他数据库开发大版内专家分月排行榜第二2013年10月 其他数据库开发大版内专家分月排行榜第二2013年8月 其他数据库开发大版内专家分月排行榜第二2013年5月 其他数据库开发大版内专家分月排行榜第二2013年1月 其他数据库开发大版内专家分月排行榜第二2012年8月 其他数据库开发大版内专家分月排行榜第二2012年5月 其他数据库开发大版内专家分月排行榜第二2012年4月 其他数据库开发大版内专家分月排行榜第二2012年1月 其他数据库开发大版内专家分月排行榜第二
2017年9月 其他数据库开发大版内专家分月排行榜第三2017年7月 其他数据库开发大版内专家分月排行榜第三2017年5月 其他数据库开发大版内专家分月排行榜第三2017年3月 其他数据库开发大版内专家分月排行榜第三2016年12月 其他数据库开发大版内专家分月排行榜第三2014年11月 其他数据库开发大版内专家分月排行榜第三2014年7月 其他数据库开发大版内专家分月排行榜第三2014年6月 其他数据库开发大版内专家分月排行榜第三2014年5月 其他数据库开发大版内专家分月排行榜第三2013年7月 其他数据库开发大版内专家分月排行榜第三2013年3月 其他数据库开发大版内专家分月排行榜第三2012年7月 其他数据库开发大版内专家分月排行榜第三2012年6月 其他数据库开发大版内专家分月排行榜第三2011年12月 其他数据库开发大版内专家分月排行榜第三
本版专家分:0
结帖率 95%
本版专家分:0
结帖率 95%
本版专家分:1046
本版专家分:20
本版专家分:5765
本版专家分:10
本版专家分:14035
本版专家分:418
本版专家分:470928
2012年 荣获名人称号
2010年 总版技术专家分年内排行榜第二
2009年 总版技术专家分年内排行榜第三
2013年 总版技术专家分年内排行榜第十2011年 总版技术专家分年内排行榜第七
本版专家分:53518
2012年11月 其他数据库开发大版内专家分月排行榜第一
2010年6月 其他数据库开发大版内专家分月排行榜第二2010年6月 Oracle大版内专家分月排行榜第二2010年5月 其他数据库开发大版内专家分月排行榜第二
2011年1月 其他数据库开发大版内专家分月排行榜第三2010年12月 其他数据库开发大版内专家分月排行榜第三
匿名用户不能发表回复!|
CSDN今日推荐

我要回帖

更多关于 java怎么防止注入 的文章

 

随机推荐