Domanda

Ho fatto qualche ricerca in giro, ma ho una domanda specifica su SQL Injection e spero di poter ottenere qualche input come credo io possa essere sempre dalla parte sbagliata del bastone a che fare con dati di campo sanificazione ecc: -

Ho un programma Java di chiamare una stored procedure su un iSeries. La stored procedure ha CL codice / RPG dietro le quinte. La stored procedure viene chiamata per mezzo di parametri con i dati provenienti da una pagina web. Ad esempio, la chiamata sarebbe simile al seguente: -

call library.prog('field1Value', 'field2Value')

Devo preoccuparsi di eventuali caratteri immessi tramite il sito web in etc 'field1Value' o, perché è una chiamata di stored procedure, non il pericolo di SQL injection non esiste? Dipende dal fatto che il programma RPG dietro le quinte usa 'field1Value' nella propria istruzione SQL come parte di quella trasformazione?

Le lunghezze di campo passati nel proecdure sono a lunghezza fissa in modo da non possiamo, per esempio, convertire i caratteri 'dubbia' nel loro html equivalente.

Apprezzare tutto (sto anticipando questa potrebbe essere una domanda stupida!) Di retroazione (non necessariamente iSeries specifico) su questo.

È stato utile?

Soluzione

a meno che non si sta utilizzando quei parametri per costruire SQL dinamica del proc sé si dovrebbe andare bene

Inoltre, non è possibile pulirla controllando i parametri

vedi qui: SQL teaser..try proteggere questo

di seguito è la sintassi SQL server

posso chiamare un proc come questo

prDropDeadFred ' declare @d varchar(100) select @d = reverse(''elbaTdaB,elbatecin elbat pord'') exec (@d)'

o come questo

prDropDeadFred ' declare @d varchar(100) select @d = convert(varchar(100),0x64726F70207461626C65204E6963655461626C652C4261645461626C65) exec (@d)'

o 5000 altri modi che non conoscere

Altri suggerimenti

Potrebbe non essere sicuro, se il chiamato programma utilizza i parametri di input per costruire SQL dinamico, passa le informazioni a un altro programma che fa, o lo memorizza in un campo di tabella del database che viene poi utilizzato per SQL dinamico in qualche altro programma .

Se si sta utilizzando JDBC CallableStatement, allora sei al sicuro. CallableStatement è solo un sottotipo di PreparedStatement, e gli attacchi SQL injection non dovrebbe essere possibile. L'unico modo che posso pensare per questo non sia vero sarebbe se la stored procedure stava eseguendo SQL dinamico.

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