PreparedStatement 防数据库注入漏洞攻击

来源:互联网 发布:| wc linux 编辑:程序博客网 时间:2024/04/29 00:35

以前看过一些C#关于数据库的操作,记得其中用@来防止数据库注入漏洞攻击,现在由于实习需要,转向Java,学习Jdbc,正好在做数据库这一块,联想到Jdbc要怎么防止数据库注入漏洞攻击呢,于是百度Jdbc防止注入漏洞攻击,找到PreparedStatement类,在这里记一下,以便以后复习,也给入门级需要的朋友做一下参考,如有不对之处,还请指正。

首先看一下什么是sql注入漏洞,见下面的sql语句:


String sql = "select name,password from User where  name= '"+ userName + "'+ and password= '"+password+"'";


相信很多人都喜欢这样拼sql语句,但如果我们知道 某一个usrName,但不知道密码,于是我们传password的时候,

传入 or '1'='1, 结果也会登陆成功,这就是拼sql的坏处,于是就有了C#中的@,以及jdbc中的PreparedStatement

(注意与Statement的区别,Statement是PreparedStatement的父类,但其无法防止sql注入漏洞)
有了PreparedStatement,于是我们可以这么写

ResultSet rs=null;PreparedStatement stat = null;Connection conn = null;try{Class.forName(".......");//加载数据库驱动conn = DriverManager.getConnection(".....",".....", ".....");//获取数据库连接String sql = "select name,password from User where  name = ? and password = ? ";  pStat = conn.prepareStatement(sql);pStat.setString(1,name);//name是要传的用户名  pStat.setString(2,password);//password是要传的密码rs=pStat.executeQuery(sql);}catch(Exception e){e.printStackTrace();}


利用PreparedStatement我们就可以有效的避免sql注入漏洞攻击了。



3 0
原创粉丝点击