sql注入漏洞的一种实例
2013-10-27 22:50
281 查看
在做毕业设计的时候,竟然碰到了一中叫sql注入漏洞的现象。
当笔者用一条sql语句查询时,select * from users where username='zf' and passwd='zf' or 1='1' 竟然将所有的数据全都查了出来。
检查用户合法性的代码如下:
这时候在登录界面随便输入一个用户名,然后密码输入select * from users where username='zf' and passwd='zf' or 1='1' 中红色的部分即可(zf可以是任意字符,为空也可),就可以顺利的登入网站。是无论用什么用户名都可以。
解决的办法就是通用输入的用户名去查询数据库,然后返回一个密码,用这个密码与用户输入的密码进行比较,这样就可以解决如上的sql注入漏洞的问题。
String sql="select top 1 passwd from users where username='"+u+"' ";
ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
String passwd=rs.getString(3);
if(passwd.equals(p)){
b=true;
}
}
还有一种办法就是用ps.setXXX()的方式。
这两种方式都可以解决这种sql注入漏洞的。当然第一种方法是通用的,而第二种只能针对jsp语言的。
如有不足之处欢迎提出。
当笔者用一条sql语句查询时,select * from users where username='zf' and passwd='zf' or 1='1' 竟然将所有的数据全都查了出来。
检查用户合法性的代码如下:
//检查用户的合法性 public boolean checkUser(String u,String p){ boolean b=false; try { ConnDB db=new ConnDB(); conn=db.getConn(); String sql="select top 1 * from users where username='"+u+"' and passwd='"+p+"'"; ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); if (rs.next()) { b=true; } }catch (Exception e) { e.printStackTrace(); }finally{ this.close(); } return b; }
这时候在登录界面随便输入一个用户名,然后密码输入select * from users where username='zf' and passwd='zf' or 1='1' 中红色的部分即可(zf可以是任意字符,为空也可),就可以顺利的登入网站。是无论用什么用户名都可以。
解决的办法就是通用输入的用户名去查询数据库,然后返回一个密码,用这个密码与用户输入的密码进行比较,这样就可以解决如上的sql注入漏洞的问题。
String sql="select top 1 passwd from users where username='"+u+"' ";
ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
String passwd=rs.getString(3);
if(passwd.equals(p)){
b=true;
}
}
还有一种办法就是用ps.setXXX()的方式。
//检查用户的合法性 public boolean checkUser(String u,String p){ boolean b=false; try { ConnDB db=new ConnDB(); conn=db.getConn(); String sql="select top 1 * from users where username=? and passwd=?"; ps = conn.prepareStatement(sql); ps.setString(1, u); ps.setString(2, p); ResultSet rs = ps.executeQuery(); if (rs.next()) { b=true; } }catch (Exception e) { e.printStackTrace(); }finally{ this.close(); } return b; }
这两种方式都可以解决这种sql注入漏洞的。当然第一种方法是通用的,而第二种只能针对jsp语言的。
如有不足之处欢迎提出。
相关文章推荐
- 黄聪:SQL注入代码实例。如何使用SQL注入检查漏洞、猜测数据库表明、列名、帐号密码
- 利用SQL注入漏洞登录后台的实例
- sql注入实例
- SQL注入——漏洞全接触(高级篇)
- SQL注入漏洞全接触--入门篇 [1]
- SQL注入漏洞全接触——入门篇
- 《sql注入攻击与防御 第2版》的总结 之 如何确定有sql注入漏洞
- 通用线程:awk 实例,第 1 部分:一种名称很奇特的优秀语言介绍
- 浮点数:一种有漏洞的抽象【译】
- 三步堵死SQL注入漏洞
- WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案
- IBM Security AppScan Glass Box:一种全新的漏洞扫描思想
- SQL注入漏洞全接触--进阶篇
- SQL注入漏洞全接触--高级篇 [3]
- 漏洞预警:zabbix再爆高危SQL注入漏洞,可获操作系统权限
- 如何使用PDO查询Mysql来避免SQL注入风险?ThinkPHP 3.1中的SQL注入漏洞分析!
- SQL注入天书之ASP注入漏洞全接触
- WordPress Poll插件多个SQL注入和安全绕过漏洞
- 一种通用防SQL注入漏洞程序(Global.asax方式)
- php is_numberic函数造成的SQL注入漏洞