类型: 安全缺陷

    SQL注入是一种数据库攻击手段。攻击者通过向应用程序提交恶意代码来改变原SQL语句的含义,进而执行任意SQL命令,达到入侵数据库乃至操作系统的目的。使用Hibernate执行一个通过用户输入构建的动态SQL指令,会使攻击者篡改指令的含义或者执行任意的SQL命令。

    例如:下面代码片段中,动态构造并执行了一个SQL查询。

    1. String queryString = "from db_user where name like '%" + userName + "%' ";
    2. List result = session.createQuery(queryString).list();

    如果攻击者能够替代userName的任意字符串,他们可以使用下面的关于userName的字符串进行SQL注入。
    ‘ or 1=1 or ‘’=’
    当其注入到命令时,命令就会变成:
    from db_user where name like ‘%’ or 1=1 or ‘’=’%’