Ho paura che questo rapporto sia probabilmente troppo carente nei dettagli per fornire una diagnosi. Non riesco a diagnosticare questo problema senza aver visto il codice.
Non devi assolutamente ignorare un avviso di analisi statica come "rischio attenuato" quando non hai fatto nulla per attenuarlo e non capire se l'avviso rappresenta una vulnerabilità sfruttabile o meno.
Ti suggerisco di iniziare con informarti sull'iniezione SQL , sulla sicurezza Hibernate e su questo particolare avvertimento. Molto probabilmente Fortify ha una guida in linea che fornisce una spiegazione dettagliata di questo avvertimento; dovresti iniziare leggendo quello Leggi il seguente documento Fortify backgrounder su SQL injection in Hibernate .
Raccomando anche i seguenti articoli: In che modo l'iniezione SQL si interrompe in genere in una configurazione Spring / Hibernate ,
Iniezione ORM e Come evitare l'iniezione SQL in Hibernate (A Hibernate Urban Legend) .
Aggiornamento (4/20): Vedo che hai aggiornato la domanda per includere il codice. Grazie. Il codice che hai fornito è davvero dubbio, e penso che sia ragionevole per Fortify lamentarsi di quel codice. Guardando questo codice, non è possibile verificare che la query passata a createQuery()
sia una costante in fase di compilazione, motivo per cui Fortify emette un messaggio di avviso.
Fondamentalmente, il codice che mostri sembra costruire una query SQL usando la concatenazione di stringhe. È pericoloso Se propName
può essere influenzato dall'hacker, allora hai una possibile vulnerabilità di SQL injection. È meglio evitare di costruire la query SQL in questo modo.
In particolare, c'è un mito che usa le istruzioni preparate (o le query parametrizzate) è intrinsecamente immune dall'iniezione SQL. Questo è vero, ma solo se la query stessa è una costante in fase di compilazione che non può essere influenzata dall'hacker. Se inserisci dati non attendibili nella query stessa, utilizzarli in una dichiarazione preparata non ti rende magicamente in qualche modo sicuro.
Quindi la best practice è che, quando si utilizza un'istruzione preparata, assicurarsi che la query possa essere facilmente verificata come costante in fase di compilazione (e non può essere influenzata dall'hacker).
Per riassumere le regole generali del pollice: (1) Non utilizzare la concatenazione di stringhe per creare una query SQL. (2) Quando si desidera una certa dipendenza dai valori di runtime, utilizzare le istruzioni preparate per associare i valori di runtime. (3) Assicurarsi che la query che si utilizza per creare l'istruzione preparata possa essere facilmente verificata come una costante in fase di compilazione. Seguire queste pratiche dovrebbe aiutare a scongiurare attacchi di SQL injection.