问一个关于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基本能解决了