首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EJB3 SQL注入

EJB3 SQL注入
EN

Stack Overflow用户
提问于 2012-02-12 08:09:41
回答 2查看 872关注 0票数 0

我想知道EJB3对防止SQL注入有多安全。

我读到过使用预准备语句是非常安全的,但例如使用如下的函数

代码语言:javascript
复制
@Override
public Collection<Project> searchProjectsPerProfessorLastname(String lastname) {
    Query q = manager.createQuery("SELECT DISTINCT OBJECT(p) FROM Project p JOIN p.professors prof WHERE lower(prof.lastName) = ?1");
    q.setParameter(1, lastname.toLowerCase());
    @SuppressWarnings("unchecked")
    Collection<Project> c = q.getResultList();
    if(c.size()==0)
       return null;
    return c;
}

可以执行SQL注入吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-12 08:23:46

不是的。

简而言之,只要不是动态构建SQL (并且绑定不是在构建SQL),就不存在SQL注入的风险。除非有错误的SQL驱动程序。

绑定是一种通过驱动程序将参数分配给SQL语句的技术,而不是通过自己简单地构建SQL文本。

不同的驱动程序做不同的事情,但是发生SQL注入的原因是创建SQL文本的人没有采取适当的预防措施来防止SQL注入(特别是转义引号之类的特殊字符)。

理想情况下,驱动程序会注意正确地构建SQL。但如果司机在某种程度上有缺陷,仍然存在一些风险。就我个人而言,我还没有遇到过有bug影响这一点的驱动程序。所以,虽然这是可能的,但它真的非常,非常遥远。

最后,对于您的示例,您甚至没有使用SQL,您使用的是EQL,这是JPA查询语言。这必须再次从EQL转换为SQL,这为中间软件(JPA和JDBC驱动程序)提供了更多机会来防止SQL注入的发生。

票数 1
EN

Stack Overflow用户

发布于 2012-02-12 08:24:25

JPA调用的所有参数化查询表单都被认为是安全的,不会受到SQL注入的影响。但是,您可以使用连接来创建查询字符串,这将是不安全的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9245225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档