0

我已经进行了一些搜索,但我有一个关于 SQL 注入的具体问题,并希望我能得到一些输入,因为我相信我可能在字段数据清理等方面得到了错误的结果:-

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

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

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

传递到过程中的字段长度是固定长度的,因此我们不能,例如,将“狡猾”字符转换为它们的 html 等价物。

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

4

3 回答 3

1

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

你也不能通过检查参数来清理它

请参见此处:SQL 预告片..尝试保护它

下面是 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 种你不知道的其他方式

于 2009-07-13T14:14:47.453 回答
1

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

于 2012-03-07T00:14:06.070 回答
0

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

于 2009-07-13T14:12:15.367 回答