请问一下高手们,小弟最近看了比较多的sql注入方面的文章,但无一例外全是.net和php的,没看到有java的。
java的sql注入按道理说跟那边是一样的不是吗?怎么会没这方面的相关的文章呢?
顺便提一下,小弟想进学习下sql注入在java方面的防范,谢谢
java的sql注入按道理说跟那边是一样的不是吗?怎么会没这方面的相关的文章呢?
顺便提一下,小弟想进学习下sql注入在java方面的防范,谢谢
解决方案 »
- 知道远程主机的用户名密码,怎样用java登陆并获取访问权限
- hibernate 连mysql ,mysql 可以不设密码吗?
- SSH、JNDI与Tomcate6.0如何集成?
- Weblogic启动时的错误----新手,各位大侠请帮忙!
- struts中,大家有碰到过类似的报错吗:ERROR DispatchAction - Action does not contain method named,在struts你有没有碰到过Action中
- 初学者问题toncat
- 跪求大神,关于3306端口为什么一直开不了项目
- 万恶的根源:hibernate的关联,最易导致出错的地方,没有问题都能给你弄点问题出来,调试繁琐,一出错就错一片,有没有?
- JTable模仿DBGridEH问题,超难超有用,大家来讨论
- 求助!如何清空某个表JTable...
- PreparedStatement 和Statement区别?
- 怎样快速开始投入开发?
String name = request.getParameter("name");
String pwd = request.getParameter("name");if(null == name||null == pwd){
response.sendRedirect("login.jsp");
return;
}
if(name.equals("")||pwd.equals("")){
out.println("用户名和密码不能为空,请重新<a href = login.jsp>登录</a>");
return;
}
//这中间省略部分代码
Statement stmt = conn.createStatement();
String strCmd = "select username from managers where username="+"'name"'and password ='"+pwd+"'";
ResultSet rs = stmt.executeQuery(strCmd);
if(rs.next()){
sesssion.setAttribute("use",name);
response.sendRedirect("admin.jsp");
return;
}else{
response.sendRedirect("login.jsp");
return;
}
如果有恶意用户通过查看网页源代码,知道了表单中输入用户名的文本域和口令域的名字,直接在浏览器的地址中输入如下的URL:http://www.asdf.com/loginchk.jsp?name=abc&password=123456'or'1'='1,于是就顺利地访问到了管理页面。
select username from managers where username='abc' and password='123456' or'1'=1
最后的or '1'=1,这是一个恒等的条件。是一个特殊的SQL查询,让原本不成立的条件(用户名和密码的匹配条件)成立了。这个就是SQL注入攻击的例子可以使用PreparedStatement取代Statement执行查询语句。
public String query(String userName,String password,Connection conn){
String returnS="";
try {
PreparedStatement pst=conn.prepareStatement("select user_name from ky_user where user_name=? and enter_password= MD5(?)");
pst.setString(1, userName);
pst.setString(2, password);
ResultSet rs=pst.executeQuery();
if(rs.next()){
returnS= "userPasswordCorrect";
}else{
returnS= "userPasswordError";
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return returnS;
}