SQL注入 - 存储过程调用没有危险(在iSeries上)?

时间:2009-07-13 14:08:46

标签: stored-procedures xss sql-injection ibm-midrange rpgle

我已经做了一些搜索,但我有一个关于SQL注入的具体问题,希望我可以得到一些输入,因为我相信我可能会得到错误的结束与字段数据清理等: -

我有一个java程序在iSeries上调用存储过程。存储过程在后台具有CL / RPG代码。通过参数调用存储过程,数据来自网页。例如,呼叫将如下所示: -

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

我是否需要担心通过网站输入的任何字符到'field1Value'等,或者因为它是存储过程调用,是否存在sql注入的危险?是否取决于幕后的RPG程序是否在其自己的SQL语句中使用“field1Value”作为该处理的一部分?

传递给proecdure的字段长度是固定长度的,所以我们不能,例如,将'dodgy'字符转换为它们的html等价物。

欣赏任何(我预计这可能是一个愚蠢的问题!)反馈(不一定是iSeries特定的)。

3 个答案:

答案 0 :(得分:1)

除非您使用这些参数在proc本身构建动态sql,否则你应该没问题

你也无法通过检查参数来清理它

见这里:SQL teaser..try protecting this

下面是sql server语法

我可以像这样调用一个proc

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

或者像这样

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

或其他5000种您不了解的方式

答案 1 :(得分:1)

如果被调用的程序使用输入参数构造动态SQL,将信息传递给另一个执行的程序,或将其存储在数据库表字段中,稍后在某些其他程序中用于动态SQL,则可能不安全。

答案 2 :(得分:0)

如果您正在使用JDBC CallableStatement,那么您就是安全的。 CallableStatement只是PreparedStatement的子类型,不应该有SQL注入攻击。如果您的存储过程正在执行动态SQL,那么我能想到的唯一方法就是这样做。