我刚刚偶然发现了一个同事的一些 SQL 代码(我们有一个“不要修复它,如果它没有破坏策略”),用于登录过程。名称变量由来自 JSP 的输入字段提供。
//BAD CODING ALERT: DONT USE THIS CRAPPY CODE, YOU NAUGHTY COPY PASTERS!
Query q = em.createQuery("select object(u) from User as u where u.name = '" + name + "'");
name
除了服务器端对一些非法字符进行验证之外,变量上根本没有任何卫生设施:(请<>"'%;()
注意,这是单引号和双引号)
这可以被利用吗?如果是,那又如何?
如果不是单引号和双引号,可以执行以下操作:blah' OR 'x'='x