码迷,mamicode.com
首页 > 数据库 > 详细

看好你的门-保护数据存储区(1)-SQL注入防御

时间:2015-03-11 12:55:16      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:安全   web安全   金融安全   sql注入   

首先需要声明,本文纯属一个毫无远见和真才实学的小小开发人员的愚昧见解,仅供用于web系统安全方面的参考。

1、常用的SQL注入防御的方法

一个能连接数据库的应用。
1.对用户端输入的数据进行严格防范;
2.使用PreparedStatement执行Sql语句;
3.不仅仅要在页面层面进行验证,在服务端层面还要同步进行这些验证;

2、使用正则表达式屏蔽特殊字符

使用SQL注入攻击多在特殊字符上下手脚,如“’”,“*”,“/” ,”–”等,如果用正则表达式限制特殊字符输入,这些手段将没有效果。下面的代码将阻止含有特殊字符的请求。

if(Pattern.matches(“\w+”, name)==false || Pattern.matches(“\w+”, pswd)==false ){
// 返回login界面
request.setAttribute(“feedbackMsg”, “用户名和密码不允许包括特殊字符”);
RequestDispatcher dispatcher = request.getRequestDispatcher(“/web/page/login1.jsp?curr=0”);
dispatcher.forward(request, response);
return;
}

3、使用PreparedStatement代替Statement

SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑,如果使用PreparedStatement执行SQL语句,其后只是输入参数, SQL注入攻击手段将无效,这是因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构。示例代码如下:

Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;

String sql=” select count(*) from usertable where name=? and password=? “;
ps=conn.prepareStatement(sql);
ps.setString(1, name);
ps.setString(2, password);
PreparedStatement的错误使用

用PreparedStatement来防范SQL注入攻击是因为“因为PreparedStatement不允许在不同的插入时间改变查询的逻辑结构”,如果如下使用则起不到这个效果,因为SQL语句和参数没有分开,它们被组合在一起被一次性提交了。

看好你的门-保护数据存储区(1)-SQL注入防御

标签:安全   web安全   金融安全   sql注入   

原文地址:http://blog.csdn.net/ffm83/article/details/44197137

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!