当<>“'%;()被删除时,SQL注入是否可行?

时间:2013-08-06 14:59:48

标签: java sql hibernate jsp sql-injection

我只是偶然发现了一个同事的一些SQL代码(我们有一个“不修复它,如果它没有破坏政策”),用于登录过程。 name变量由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

2 个答案:

答案 0 :(得分: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")
由于转义值,没有SQLInjection可能;

答案 1 :(得分:0)

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

在低估这个之前,请阅读问题。或者给出一个漏洞利用示例。