细心!用心!耐心!
吾非文人,乃市井一俗人也,读百卷书,跨江河千里,故申城一游; 一两滴辛酸,三四年学业,五六点粗墨,七八笔买卖,九十道人情。
BlogJava
联系
聚合
管理
1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(5)
给我留言
查看公开留言
查看私人留言
随笔分类
网关编程
设计模式
文章分类
AJAX技术(13)
ANT的使用(3)
Behavioral 模式 (11)
core java中的一些数据结构的处理(15)
Creational 模式(7)
I/O机制的编程
JPA(6)
liferay portal(19)
Oracle BPM专题(1)
SSH框架编程(1)
Structural 模式 (10)
webservice编程
事务编程(2)
任务调度器(1)
多執行緒模式(8)
多线程编程(5)
如何debug(2)
常用javascript(7)
数据库编程(5)
服务器编程(5)
网关编程(6)
网络协议编程(2)
面向对象的一些难点问题
项目框架的设想(21)
文章档案
2014年7月 (5)
2014年1月 (1)
2012年10月 (3)
2012年9月 (4)
2012年6月 (7)
2008年11月 (8)
2008年5月 (1)
2007年11月 (2)
2007年10月 (2)
2007年7月 (7)
2007年5月 (42)
2007年4月 (58)
2007年3月 (9)
2007年2月 (8)
2007年1月 (7)
收藏夹
Doug Lea关于util.concurrent并发工具包的讲座(3)
搜索
最新评论
1. re: createNativeQuery原生-命名查询[未登录]
query.getResultList() 这个返回的值 用什么实体 类 接受 呢?
--111
2. re: JPA本地查询(Native Query)(二)[未登录]
fdfdf
--abc
3. re: JPA EntityManager详解(一)
版主,如果利用entityManager进行查询,如何在sql里边传参,防注入的那种
--谢谢
4. re: dwr简介--一个例子(一)
天通苑
--67
5. re: 图片自动生成器
wq ery 2we wei 3ik w3
-- kplie
存在sql注入式攻击的最差实践代码(Java新手注意了)
下面是自己以前初学JDBC时候写的代码,存在sql注入漏洞。
blackanger 51cto技术博客
不安全因素:statement。。。应该用Preparedstatement来代替statement,这样我们就可以使用占位符作为实参来定义sql语句,从而避免sql注入的攻击。
blackanger 51cto技术博客
当然也可以用statement,你得注意你的sql的写法,要是下例肯定不行。还得对url恶意传入参数进行过滤(SQL元字符处理)。。。这样就比较麻烦了,而且也无法保证绝对的安全。
blackanger 51cto技术博客
我们在用hibernate等框架的时候(hql语句),避免sql注入攻击也是一样的,关键是不要用string来构造sql语句,不管什么框架,还是纯JDBC,只要用Preparedstatement就OK。。。
一定要用占位符作为实参来构造sql(或hql)语句。
blackanger 51cto技术博客
package cn.zhd;
import java.io.*;
import org.apache.log4j.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
public class LoginDemo {
public void execute(String user,String pass){
boolean foo=false;
try{
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection("jdbc:mysql://localhost/students","root","");
Statement stam=con.createStatement();
//存在注入攻击漏洞:select * from login where user='' or'x'='x' or 'x'='' and '1'
ResultSet rs=stam.executeQuery("select * from login where user='" + user + "' and pass='"+ pass + "'");
while(rs.next()){
foo=true;
}
if(foo){
System.out.println("登陆成功");
}
else
{
System.out.println("用户名密码错误");
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(SQLException e){
e.printStackTrace();
}
}
public static void main(String[] args){
Logger log=Logger.getLogger(LoginDemo.class);
try{
LoginDemo ld=new LoginDemo();
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
log.info("请输入用户名");
String bf_str=bf.readLine();
log.info("请输入密码");
String bf2_str=bf.readLine();
bf.close();
ld.execute(bf_str,bf2_str);
}catch(IOException e){
e.printStackTrace();
}
}
}
当输入用户名的时候输入:' or 'x'='x' or '2'='
密码随便输.....
成功登陆了吧.....
blackanger 51cto技术博客
posted on 2007-04-20 13:51
张金鹏
阅读(350)
评论(0)
编辑
收藏
所属分类:
数据库编程
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
连接各种数据库方式速查表(JDBC)
MySQL导出导入命令的用例
存在sql注入式攻击的最差实践代码(Java新手注意了)
Powered by:
BlogJava
Copyright © 张金鹏