-1

我刚刚偶然发现了一个同事的一些 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

4

2 回答 2

2

您永远不应该通过字符串连接创建查询。利用query.setParameter("paramName",paramValue);

所以会是这样的

Query q = em.createQuery("select object(u) from User as u where u.name =:name");
q.setParameter("name", "O'Reilly")
由于转义值,不可能进行 SQLInjections;

于 2013-08-06T15:19:40.750 回答
0

回答我自己的问题......它是安全的,但正如我自己所说的那样不实用。

在对此投票之前,请阅读问题。或者以其他方式给出一个利用示例。

于 2013-08-08T10:35:04.740 回答