【问题标题】:SQL injection for Stored Procedure存储过程的 SQL 注入
【发布时间】:2018-10-06 15:44:39
【问题描述】:

我正在评估为我的 sp 进行 SQL 注入的可能性。

我曾尝试使用它进行 SQL 注入,但没有成功注入(意味着注入文本已正常插入到表中):

data'; DROP TABLE my_table; --

我应该如何尝试 SQL 注入?还是 SP 非常安全,以某种方式阻止了 SQL 注入?

我的减SP如下:

@ID int,
@AIType varchar(1),
@parent varchar(20),
@child varchar(20),
AS
BEGIN

SET NOCOUNT ON;
-- Insert statements for procedure here
BEGIN TRY
    UPDATE AI_Grouping
    SET AIType=@AIType, 
        parent=@parent,
        child=@child,
    WHERE ID=@ID
END TRY
BEGIN CATCH
    -- Catch exceptions
END CATCH
END 

编辑:

如果有帮助 - 在前端,我有一个与 SP 变量类型一致的字段长度验证。有些字段最多 8 个字符,有些字段最多 20 个字符(如上例)。也许我上面尝试的注入示例是一个不好的示例,因为长度超过 20 个字符...... 最终的问题是,我的 SP 是否容易受到 SQL 注入的攻击?

【问题讨论】:

  • 对 SP 执行 SQL 注入的唯一方法是使用动态查询并在其上连接 varchar 参数。没有动态查询的存储过程是预编译的,所以不能带参数改变命令。
  • 感谢@JorgeCampos 的评论。你是想说我的 SP 不会受到 SQL 注入的影响吗?
  • 有了这个代码,是的。
  • @JorgeCampos 太棒了!谢谢!

标签: oracle stored-procedures sql-injection


【解决方案1】:

来自文章:How to write SQL injection proof PL/SQL

区分编译时固定的 SQL 语句文本和 运行时创建的 SQL 语句文本

我们将术语 compile-time-fixed SQL statement text 定义为 在运行时不能更改的 SQL 语句,可以放心 通过阅读源代码确定。更准确地说,它是一个文本 作为 PL/SQL 静态 varchar2 表达式的 SQL 语句14。一个值 PL/SQL 静态 varchar2 表达式在运行时不能更改,可以在编译时预先计算。

嵌入式 SQL 的 SQL 语句文本由 PL/SQL 组成 编译器并且不能在运行时更改。因此,嵌入式 SQL 肯定 仅执行编译时固定的 SQL 语句 text15。

但是,可以很容易地安排任何 PL/SQL 的执行方法 动态 SQL 将在特定调用站点上仅执行编译时固定的 SQL。

所以你的代码是安全的。

为了区分编译时固定的 SQL运行时创建的 SQL,这里有两个示例:

编译时间固定的 SQL

CREATE PROCEDURE remove_emp (p_employee_id NUMBER) AS
  BEGIN
     -- here the delete command is immutable, therefore sql injection safe
     DELETE FROM employees
        WHERE employees.employee_id = p_employee_id;
  END;

运行时创建的 SQL

CREATE PROCEDURE remove_emp (p_employee_id VARCHAR2) AS
  BEGIN
     -- here the delete command is dynamically created allowing 
     -- sql injection
     execute immediate 'DELETE FROM employees
        WHERE employees.employee_id = ' || p_employee_id || ';';
  END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 2014-06-20
    • 2017-08-24
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多