日期:2014-05-18  浏览次数:20619 次

问一个关于SQL注入和session的安全问题??
最近在设计一个社区的登陆页面,
登陆实现:
sql   =   "select   name,power   from   user   where   name   =   ?   and   password   =   ? ";
ps   =   conn.prepareStatement(sql);
ps.setString(name);输入admin
ps.setString(password);输入正确的密码
登陆成功。

以上sql会有SQL注入或其他安全方面的问题吗?

然后取出
用户名:   name=admin
权限:       power=管理员,放在session里面。
接下来的操作都根据session里的权限来判断实行的可能。
这样做安全吗?有可能非法取得管理员的权限吗?


------解决方案--------------------
应该不会的,除非根据他人的sessionID伪造session,
------解决方案--------------------
用prepareStatement可以防止注入
------解决方案--------------------

------解决方案--------------------
这样写不安全;请使用PreparedStatement可以防止注入;
不要使用Statement;如果使用Statement的话:
如果用户输入 name的值:1 OR 1=1
password 的值:0 OR 0=0
结果执行的sql语句会变为:
select name,power from user where name = 1 OR 1 = 1 AND password = 0 OR 0 = 0
上面的语句与select name,power from user是一样的返回所有的记录;这是很可怕的!!!

PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,name);输入admin
ps.setString(2,password);输入正确的密码

另外密码最好使用加密的方式.
------解决方案--------------------
LZ的设计可行
存储到数据库的密码用MD5没问题
------解决方案--------------------
用prepareStatement可以防止注入
经典!
------解决方案--------------------
别拼sql语句就行
------解决方案--------------------
顶一个
------解决方案--------------------
其实用statement还是可以的 只是把SQL语句改一下就好.
cao_david(骆驼祥子) 同志说的那个SQL不能用
------解决方案--------------------
sql注入还要注意表单的文本框的maxlength preparedstatement基本能解决了