请教SQL注入的语句(拼SQL,被注入)

现在有这样一个表
[code="sql"]create table jaspertb (
id int auto_increment primary key,
name varchar(32),
age int
);[/code]

[code="java"]
String id = "1";
String sql = "select * from jaspertb t where t.id = " + id;
[/code]

[code="java"]
String name= "myname";
String sql = "select * from jaspertb t where t.name= " + name;
[/code]

[code="java"]
Integer age = new Integer(50);
String sql = "select * from jaspertb t where t.age= " + age;
[/code]

上面的SQL是拼出来的,怎么改变id,name,age的值,使这些SQL语句查出这张表的字段啊或者删除数据库里面的内容,或者查出其它内容,就是通常说的SQL注入。。。怎么实现 的啊,谢谢大家了。。。
[b]问题补充:[/b]
那大家看一看这个网页是不是存在SQL注入啊
http://www.zzjinhui.com/jhdt.asp?id=77'
http://www.zzjinhui.com/jhdt.asp?id=77
加了'和没有加'有明显区别

    String id = "1 or 1=1 ";
    id + = ";" + "任何可执行的sql";//比如:id + = ";" + "delete table";
    String sql = "select * from jaspertb t where t.id = " + id; 

sql injection,
比如说id吧

id= "12;delete from jaspertb;--"

;-- 是注释掉后面你不知道的sql内容

//查询jaspertb的所有记录;
String id = "1 or 1=1 ";
String sql = "select * from jaspertb t where t.id = " + id;

    System.out.println(sql);

很容易的,如果你知道字段的个数就更好了,使用union你想查什么表就查什么表了。
删除和其他的就不多说了。

请不要使用这样拼接的方式,可以使用hibernate提供的传入参数的方法。比如
参数为id
session.createQuery("from User o where o.id=?").setInteger(1,id);
hibernate提供的这样的方法可以防止sql注入,对非法字符串进行过滤。

注入?学习了阿

[size=medium]想拼字符串这种就很好办了
1.比如你要查询这个表的所有内容,你想你在数据库中可以这么查出来你就可以这么拼写。
例如:
String id = "1";

String sql = "select * from jaspertb t where t.id = " + id;

就可以再1的后面拼上 or t.id <> 1 或是 or 1=1(这个条件永远是真的)
其他两种跟这个是一样的啊。
2.想删除修改啊。就更好办了直接在后面加上";delete/update/truncate" 这些语句就可以了。

当然除非你知道表的名称和相关信息什么的。

所以这就是为什么不要用字符串去拼sql语句的原因了[/size]
:D

至于这参数可以封装到MAP里传进来,然后在这个方法中根据关键字从MAP里取值,进行判断

String SQL="select * from jaspertb t where 1=1"

if(id不为空){
 SQL=SQL+"t.id = " + id;
}

if(name不为空){
 SQL=SQL+"t.name = " + name;
}
if(age不为空){
 SQL=SQL+"t.age = " + age;
}

不知道你的意思是不是这样的,仅供参考!!!有可能没明白你的意思

一定要使用preparestatement,不直接拼sql,就没这问题了。

"select * from jaspertb t where t.id = " + id + "and 1=1"

String SQL="select * from jaspertb t where 1=1"

if(id不为空){
 SQL=SQL+" and t.id = " + id;
}

if(name不为空){
 SQL=SQL+" and t.name = " + name;
}
if(age不为空){
 SQL=SQL+" and t.age = " + age;
}

最简单的方法就是在条件后面加入一个永远为真的条件,如
String id = "1 or 1=1";

String sql = "select * from jaspertb t where t.id = " + id;

Microsoft JET Database Engine 错误 '80040e14'

字符串的语法错误 在查询表达式 'id=77'' 中。

/jhdt.asp,行 406

这不是sql注入啦
只是它通过url传递参数id = 77,他得到id的值,再去跳转到相应的页面

貌似可以进行注入了,不过不是专业的 :cry:

union?真不晓得现在我用得上嘛?