对于sql注入怎么处理呢
通过StringBulider拼接SQL语句,这样的写法,对于sql注入怎么处理呢
通过StringBulider拼接SQL语句,这样的写法,对于sql注入怎么处理呢
2016-08-03
对 于 JDBC而言, SQL注入 攻 击 只 对 Statement有效, 对 PreparedStatement 是无效的, 这 是因 为 PreparedStatement 不允 许 在不同的插入 时间 改 变查询 的 逻辑结 构。
如 验证 用 户 是否存在的 SQL语 句 为 :
select count(*) from usertable where name='用 户 名 ' and pswd='密 码 '
如果在 用 户 名字段 中 输 入 ' or '1'='1' or '1'='1
或是在 密 码 字段 中 输 入 1' or '1'='1
将 绕过验证 ,但 这种 手段只 对 只 对 Statement有效, 对 PreparedStatement 无效。
PreparedStatement 相 对 Statement有以下 优 点:
1.防注入攻击
2.多次运行速度快
3.防止数据库缓冲区溢出
4.代 码 的可读性可维护性好
------------------------参数过滤器----------------------------
2-6里面讲了类似参数过滤器的概念
DAO类:
StringBuilder sb = new StringBuilder();
sb.append(" select * from goddess where 1=1");
sb.append(" and "+map.get("name")+" "+map.get("rela")+" "+map.get("value"));
【注释:该语句为 查询什么(name),关系是什么(rela),值是什么(value)】
PreparedStatement ptmt = conn.prepareStatement(sb.toString());
-------------
ACTION类:
param.put("name", "user_name");
param.put("rela", "=");
param.put("value", "'小美'");
params.add(param);
List<Goddess> result = g.query(params);
举报