如何通过用户控制的 SQL 主键修复 CWE 566 授权绕过

Act*_*rus 6 java spring hibernate veracode

我有一个使用 hibernate 的 JEE 应用程序,Veracode 抱怨某些我不知道如何修复的代码行。基本上,我们有一个通用类来对实体执行基本操作

    public void delete(T entity, final boolean cachable) {
        getHibernateTemplate().setCacheQueries(cachable);
        getHibernateTemplate().delete(entity);
    }
Run Code Online (Sandbox Code Playgroud)

然后这段代码被这样调用

...
            connectionDAO.delete(user, nbMaxConnections);
...
Run Code Online (Sandbox Code Playgroud)

例如,实体 User 看起来像这样(我没有放置完整的类定义)

@Entity
@Auditable
public class User extends Profile implements Cloneable,UserDetails,Principal
{   
    
    /** The enabled. */
    private Boolean enabled = true;
    
    /** The reason for disabled. */
    private String reasonForDisabled = null;
    
    /** The disabled date. */
    @Temporal(TemporalType.TIMESTAMP)
    private Date disabledDate = null;
    
    /** The parent. */
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn
    private Group parent = null;
    
    /** The information. */
    @Embedded
    private UserInformation information = null;
    
    /** The released date. */
    @Temporal(TemporalType.TIMESTAMP)
    private Date releasedDate = null;
    
    /** The nb wrong attempts. */
    private Integer nbWrongAttempts = null;
    
    private String salt;
Run Code Online (Sandbox Code Playgroud)

Veracode 抱怨 hibernate 模板的 delete() 调用,描述如下:

在对 org.springframework.orm.hibernate5.HibernateOperations.delete 的调用中,可以使用可由外部提供的值控制的主键来执行数据访问语句。如果提供的主键未经过正确验证,并且底层存储不限制仅访问用户应被授予访问权限的实体,则攻击者可能会引用未经授权的记录。

我不知道要检查什么(在删除该实体之前是否应该首先检查该实体是否存在于数据库中?)

问候