Domanda

Sto lavorando per un cliente con un'enorme base di codice legacy composta da varie applicazioni basate su Java e JSP.

La maggior parte delle query viene eseguita utilizzando il sistema 'orm' di home-build. Alcune applicazioni usano Plain Old JDBC. Alcune applicazioni sono basate su Hibernate (sì, anche la build HQL con segni più è un potenziale problema). Alcune delle applicazioni più vecchie sono interamente scritte in JSP.

Ho trovato manualmente un paio di bug di SQL Inject. Ma potrei davvero usare una sorta di strumento per cercare potenziali punti deboli.

Qualche idea?

È stato utile?

Soluzione

Consiglierei FindBugs (c'è anche un plugin eclipse) che può rintracciare questi problemi e molti altri .

Lo stiamo usando al lavoro, è veloce e vale la pena (come in gratis). Abbiamo risolto alcuni problemi comuni con il suo aiuto.

Altri suggerimenti

Scriverei alcune ricerche o caricarei un IDE che cercava l'uso di java.sql.Statement invece di PreparedStatement.

Quanto è grande lo spazio del tuo URL? Se possibile, è meglio tentare l'iniezione SQL tramite richieste HTTP GET e POST. Esistono alcuni problemi che possono essere rilevati dall'esame del codice sorgente / byte, ma l'unico modo per sapere con certezza quali tipi di input potenzialmente dannosi la tua applicazione accetterà è utilizzare le richieste HTTP.

CAL9000 è un buon strumento di test SQL Injection / Cross-site Scripting se il tuo set di URL è piccolo.

Le aziende che si impegnano seriamente a rilevare input malevoli mal gestiti assumeranno una terza parte per eseguire test di penetrazione. White Hat Security è un fornitore con cui ho lavorato in passato e che posso consigliare. Li abbiamo usati per un sito di e-commerce da $ 100 MM +. (Non ho alcuna affiliazione con White Hat e non ne traggo alcun vantaggio se diventi il ??loro cliente.)

A parte tutti i test / hardening del tuo codice, è una buona idea avere un firewall HTTP installato come mod_security .

Quando stavo lavorando alla localizzazione di " this-will-never-need-localization " applicazione, utilizziamo uno strumento fatto in casa per analizzare il codice compilato (IL in .NET, è uguale al codice byte in Java).

Puoi trovare la chiamata dei metodi specificati che funzionano con DB (tipicamente operazioni CRUD) con un parametro stringa con comando SQL e traccia l'istanza di stringa in alto e verifica la conciliazione.

Abbiamo usato .NET Reflector per decompilare e tracciare le stringhe. Ma non lo so, se è disponibile uno strumento simile per Java :(.

Puoi scegliere la prevenzione piuttosto che la cura. aggiungi un livello di sanificazione proprio sotto la tua UI, così non finirai con sql / script negli input dell'utente. Devono esserci degli esempi in Java, ho visto un simile approccio in CakePHP

Trova qualsiasi luogo che non utilizza un PreparedStatement .

Raccomando CAL9000. Puoi ottenere i dettagli dal seguente link:

CAL9000

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top