首页 > 数据库 >关于 ABAP OPEN SQL 注入漏洞的防御

关于 ABAP OPEN SQL 注入漏洞的防御

时间:2023-11-25 21:35:34浏览次数:44  
标签:语句 sflight lv ABAP SQL OPEN id

SQL 注入是一种代码注入技术,攻击者通过在查询中注入恶意 SQL 代码,以此改变查询的原始意图。这可能导致未授权的数据访问、数据篡改、甚至数据丢失。

在 SAP ABAP 中,SQL 注入的风险主要来自于动态构造的 SQL 语句。ABAP 提供了 Open SQL 和 Native SQL 两种方式来访问数据库,其中 Open SQL 提供了一种与数据库无关的方式,而 Native SQL 则允许直接使用特定数据库的 SQL 语法。虽然 Open SQL 提供了一些安全性的保障,但如果不正确地使用,也可能导致 SQL 注入的风险。

以下是一个具体的例子:

假设我们有一个函数,它接受一个参数并根据该参数从数据库中获取数据:

FORM get_data USING p_id TYPE string.
  DATA: lv_sql TYPE string.
  CONCATENATE `SELECT * FROM sflight WHERE carrid = '` p_id `';` INTO lv_sql.
  EXECUTE lv_sql.
ENDFORM.

这里,我们直接将用户提供的参数 p_id 拼接到 SQL 语句中。如果用户提供了一个正常的参数,例如 AA,那么生成的 SQL 语句将是 SELECT * FROM sflight WHERE carrid = 'AA';,这是完全正常的。然而,如果用户提供了一个恶意的参数,例如 AA'; DROP TABLE sflight; --,那么生成的 SQL 语句将是 SELECT * FROM sflight WHERE carrid = 'AA'; DROP TABLE sflight; --';。这个 SQL 语句实际上包含了两个语句:一个是正常的 SELECT 语句,另一个是 DROP TABLE 语句。执行这个 SQL 语句将会删除 sflight 表,这显然是一个严重的安全问题。

为了防止 SQL 注入,我们需要对用户提供的参数进行验证,确保它们不包含任何恶意的 SQL 代码。ABAP 提供了一些函数和方法可以帮助我们完成这项工作,例如 CL_ABAP_DYN_PRG=>ESCAPE_FOR_SQL。以下是一个改进的例子:

FORM get_data USING p_id TYPE string.
  DATA: lv_sql TYPE string.
  DATA: lv_id TYPE string.
  CALL METHOD cl_abap_dyn_prg=>escape_for_sql
    EXPORTING
      unescaped = p_id
    RECEIVING
      escaped = lv_id.
  CONCATENATE `SELECT * FROM sflight WHERE carrid = '` lv_id `';` INTO lv_sql.
  EXECUTE lv_sql.
ENDFORM.

这里,我们使用了 CL_ABAP_DYN_PRG=>ESCAPE_FOR_SQL 方法对用户提供的参数进行转义,这样就可以防止大多数 SQL 注入攻击。需要注意的是,虽然这种方法可以提高安全性,但并不能防止所有的 SQL 注入攻击,因此还需要结合其他的安全措施,例如使用参数化的查询来限制。

标签:语句,sflight,lv,ABAP,SQL,OPEN,id
From: https://www.cnblogs.com/sap-jerry/p/17856139.html

相关文章

  • mysql多个字段最大最小值
    转自:https://www.jb51.net/article/263686.htm1、语法最大值:GREATEST(expr_1,expr_2,...expr_n)最小值:LEAST(expr_1,expr_2,...expr_n)2、说明GREATEST(expr_1,expr_2,...expr_n)函数从表达式(列、常量、计算值)expr_1,expr_2,...expr_n等中找出最大的数返回......
  • SQL 注入的基本概念介绍和预防
    SQL注入是一种常见的网络攻击手段,通过利用程序的安全漏洞,向服务器提交恶意的SQL查询代码,从而实现攻击者读取数据、修改数据、执行管理员操作等目的。SQL注入的原理是,当应用程序在处理用户输入的数据时,如果没有进行有效的安全防护,用户输入的数据可能会被直接拼接到SQL查询语......
  • 近期 OpenAI 惊现 ChatGPT 3.5 用户可以越权使用 ChatGPT 4 的漏洞
    ChatGPT4.0每个月20美元的订阅费用,让不少想尝试的朋友们有点犹豫不决。昨晚(2023年11月16日)睡觉之前我刷到这样一条新闻,ChatGPT3.5的用户,可以通过url里拼接参数的方式,直接使用ChatGPTGizmo模型。看具体的效果吧。下面部分截图,来自掘金社区这篇帖子。ChatGPT3.5......
  • C/C++ 通过SQLiteSDK增删改查
    SQLite,作为一款嵌入式关系型数据库管理系统,一直以其轻量级、零配置以及跨平台等特性而备受青睐。不同于传统的数据库系统,SQLite是一个库,直接与应用程序一同编译和链接,无需单独的数据库服务器进程,实现了数据库的零配置管理。这种设计理念使得SQLite成为许多嵌入式系统、移动应用和......
  • 关于点赞业务对MySQL和Redis和MongoDB的思考
    点赞​ 在我个人理解中,点赞业务比较频繁,很多人业务可能都会有这个,比如:博客,视频,文章,动态,评论等,但是不应该是核心业务,不应该大量地请求MySQL数据库,给数据库造成大量的资源消耗,MySQL的数据库是非常宝贵的.以某音为例,当我去搜索的时候,全抖音比较高的点赞数目应该是在1......
  • 什么是 SAP ABAP Cross Customizing Client
    CrossCustomizingClient(CCC)是SAP系统中的一个重要概念,它允许在不同的客户端(Client)之间共享和传输自定义的配置数据。在SAP中,客户端是系统中的独立实体,用于在同一系统中区分不同的业务场景或测试环境。CrossCustomizingClient的主要目的是通过一个客户端上的配置来影响另一个客......
  • 小技巧分享 - 找出 SAP ABAP SPRO 配置项后台对应配置表的两种办法试读版
    相信SPRO是广大ABAP开发人员每天使用频次最高的事务码之一了吧。毕竟SAP软件的复杂度摆在那里,无论是SAPOn-Premise产品,还是Cloud产品,在安装或者订阅之后,都要根据客户实际的业务需求,对SAP系统进行配置。在On-Premise系统里,事务码SPRO就是统一的配置入口。SPRO......
  • SAP ABAP 动态生成 ABAP 程序并动态调用的例子代码试读版
    本文回答笔者知识星球一个朋友的提问:汪老师您好,请教一个问题。ABAP里的程序能够动态生成吗?我的意思是,ABAP程序的源代码是从第三方传入的,然后在ABAP系统生成,并执行?有没有类似的例子可以参考?谢谢汪老师!首先笔者要提醒的是,这种根据第三方输入,动态生成ABAP程序并且执行的方......
  • PostgreSQL锁,第1部分:行锁
    理解PostgreSQL锁对于构建可伸缩的应用程序和避免停机是很重要的。现代计算机和服务器有许多CPU核心,可以并行执行多个查询。数据库包含许多一致的结构,这些结构由并行运行的查询或后台进程所做的更改可能导致数据库崩溃,甚至损坏数据。因此,我们需要能够阻止来自并发进程的访问,同时更......
  • PostgreSQL锁,第2部分:重量级锁
    应用程序开发人员和dba的PostgreSQL锁可见性在大多数情况下与重量级锁相关。复杂的数据库锁定操作需要使用来自系统目录的视图进行完整的检测。应该清楚哪个对象被特定的数据库“后端”进程锁定。任何锁的另一个名称是“瓶颈”。为了使数据库操作并行,我们应该将单个瓶颈分解为多个......