【第六篇】SAP ABAP7.5x新语法之SQL注入

前言部分
SQL语法允许开放SQL语句的每子句动态指定作为在括号中指定一个数据对象的内容。如果其中一个数据对象的全部或部分内容来自程序外部,则存在以下SQL注入之一的风险:
访问非允许的数据库表
如果动态指定的数据库表完全或部分来自程序外部,则用户可能会访问他们通常没有授权的数据库。如果在动态指定的数据库表中使用外部输入是不可避免的,则必须正确检查输入。
在以下程序部分中,方法CHECK_TABLE_NAME_STR仅允许访问飞行数据模型的表。来自其他或不存在的数据库表的输入被拒绝。也不允许访问超大数据库表,以避免对系统性能造成太大压力。
DATA dbtab TYPE string.
cl_demo_input=>request( CHANGING field = dbtab ). TRY.
dbtab =
cl_abap_dyn_prg=>check_table_name_str(
val = to_upper( dbtab )
packages = 'SAPBC_DATAMODEL' ).
CATCH cx_abap_not_a_table cx_abap_not_in_package.
cl_demo_output=>display( 'Wrong input' ).
LEAVE PROGRAM.
ENDTRY. DATA dref TYPE REF TO data.
FIELD-SYMBOLS <fs> TYPE STANDARD TABLE.
CREATE DATA dref TYPE STANDARD TABLE OF (dbtab)
WITH EMPTY KEY.
ASSIGN dref->* TO <fs>. DATA lines TYPE i.
SELECT COUNT(*)
FROM (dbtab)
INTO (@lines).
IF lines > 1000.
cl_demo_output=>display( 'Table too large' ).
LEAVE PROGRAM.
ENDIF. SELECT *
FROM (dbtab)
INTO TABLE @<fs>.
cl_demo_output=>display( <fs> ).
访问非允许的表列用户可能会访问为他们通常没有授权表列。用户还可以未经许可重命名列,或使用聚合函数执行未经授权的计算。如果在动态指定的表列中使用外部输入是不可避免的,则必须正确检查输入。
注意点:
在GROUP BY之后指定列时,相同的安全建议适用于在SELECT之后直接动态指定的列。
动态WHERE条件的操作
如果动态WHERE条件完全或部分来自程序外部,则用户可能会访问他们通常没有授权的数据。如果无法避免在动态WHERE条件中使用外部输入 ,则必须正确检查输入并且通常也会屏蔽输入。
注意点:
动态指定HAVING条件时,应用与动态WHERE条件相同的安全建议。
在以下程序部分中,通过使用类CL_ABAP_DYN_PRG的方法QUOTE来防止潜在的SQL注入,该方法在开头和结尾添加引号。如果未使用此方法,并且输入“x'OR name <>' ”,则会显示SCUSTOM表中的所有数据。
DATA name TYPE string.
DATA customers TYPE TABLE OF scustom WITH EMPTY KEY. cl_demo_input=>request( CHANGING field = name ). DATA(cond) = `country = 'DE' AND name = ` &&
cl_abap_dyn_prg=>quote( name ). TRY.
SELECT * FROM scustom
WHERE (cond)
INTO TABLE @customers.
cl_demo_output=>display( customers ).
CATCH cx_sy_dynamic_osql_syntax.
cl_demo_output=>display( 'Wrong input' ).
ENDTRY.
操纵动态变化表达式
如果动态更改表达式完全或部分来自程序外部,则用户可能会更改他们通常没有授权的数据。如果无法避免在动态更改表达式中使用外部输入,则必须正确检查输入并且通常也会屏蔽输入。
在以下程序部分中,通过使用类CL_ABAP_DYN_PRG的方法QUOTE来防止潜在的SQL注入,该方法在开头和结尾添加引号。如果未使用此方法,并且例如,如果在其中一个输入字段中输入“ ...'discount = '90 ”,则相关客户的折扣将设置为90。
DATA in TYPE REF TO if_demo_input. DATA customer TYPE scustom. DATA: id TYPE scustom-id,
name TYPE string,
street TYPE string,
city TYPE string,
postcode TYPE string. id = '00000001'.
SELECT SINGLE *
FROM scustom
WHERE id = @id
INTO @customer. name = customer-name.
street = customer-street.
city = customer-city.
postcode = customer-postcode. in = cl_demo_input=>new( ).
in->add_field( CHANGING field = name
)->add_field( CHANGING field = street
)->add_field( CHANGING field = city
)->add_field( CHANGING field = postcode
)->request( ). DATA(set_expr) =
COND string( WHEN name IS NOT INITIAL
THEN ` NAME = ` &&
cl_abap_dyn_prg=>quote( name ) ) &&
COND string( WHEN street IS NOT INITIAL
THEN ` STREET = ` &&
cl_abap_dyn_prg=>quote( street ) ) &&
COND string( WHEN city IS NOT INITIAL
THEN ` CITY = ` &&
cl_abap_dyn_prg=>quote( city ) ) &&
COND string( WHEN postcode IS NOT INITIAL
THEN ` POSTCODE = ` &&
cl_abap_dyn_prg=>quote( postcode ) ). TRY.
UPDATE scustom SET (set_expr) WHERE id = @id.
CATCH cx_sy_dynamic_osql_syntax.
cl_demo_output=>display( 'Wrong input' ).
ENDTRY.
【第六篇】SAP ABAP7.5x新语法之SQL注入的更多相关文章
- 【第二篇】SAP ABAP7.5x新语法之OPEN SQL
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:SAP ABAP7.5x系列之OPEN SQL ...
- 【第七篇】SAP ABAP7.5x新语法之F4增强
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:SAP ABAP7.5x系列之F4增强 前言部分 ...
- 【第八篇】SAP ABAP7.5x新语法之F4增强【续】
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:SAP ABAP7.5x系列之F4增强[续] ...
- 【第五篇】SAP ABAP7.5x新语法之命名规约
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:SAP ABAP7.5x系列之命名规约 命名 ...
- 【第四篇】SAP ABAP7.5x新语法之CREATE DATA&INTERFACE
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文地址:SAP ABAP7.5x系列之CREATE DA ...
- 【第三篇】SAP ABAP7.5x新语法之程序结构&SubScreen
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文地址:SAP ABAP7.5x系列之程序结构& ...
- 【第一篇】SAP ABAP7.5x新语法之预定义数据结构
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:SAP ABAP7.5x系列之预定义数据结构 前 ...
- 【ABAP系列】SAP ABAP7.40新语法简介第一篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP7.40新语法简 ...
- 【ABAP系列】SAP ABAP7.40新语法简介第二篇
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP7.40新语法简 ...
随机推荐
- Javascript:alert(1)可以这样写以绕过filter
在2011年的BlackHat DC 2011大会上Ryan Barnett给出了一段关于XSS的示例javascript代码: ($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+ ...
- wxformbuilder在python如何使用
1使用builder 创建界面并进行布局 2选择python选项 得到相应代码 将代码保存在 一个py文件里面 创建一个新的入口文件 main.py import wx import UIfile c ...
- Shell脚本 | 健壮性测试之空指针检查
通过 "adb shell am start" 遍历安卓应用所有的 Activity,可以检查是否存在空指针的情况. 以下为梳理后的测试流程: 通过 apktool 反编译 apk ...
- leetcode — 4sum
import java.util.Arrays; import java.util.HashSet; import java.util.Set; /** * Source : https://oj.l ...
- rtf格式 C#设置字间距 CharacterSpacing
richtextbox空间中操作行间距段间距都可以用发送消息解决,但是字间距却鲜有人关注,无法通过PARAFORMAT2消息解决,只能直接操作rtf格式 字间距主要就是要控制 expand expan ...
- Tomcat8源码笔记(三)Catalina加载过程
之前介绍过 Catalina加载过程是Bootstrap的load调用的 Tomcat8源码笔记(二)Bootstrap启动 按照Catalina的load过程,大致如下: 接下来一步步分析加载过程 ...
- Hive基础之绪论
我本人大概是从2013年12月份开始接触Hadoop,因为公司当时要开始处理一些数据量比较大的数据,现有的通过程序去统计数据的方式在效率方面渐渐不能满足业务需求,所以便开始了Hadoop技术的探索,即 ...
- 浅析JavaScript正则表达式
1.正则表达式的定义 正则表达式是一个描述字符模式的对象.JavaScript的RegExp类表示正则表达式,String和RegExp都定义了方法,后者使用正则表达式进行强大的模式匹配和文本检索与替 ...
- MySQL之单表查询
一.关键字的执行优先级 1,from:找到表 2,where:拿着where指定的约束条件,去文件/表中取出一条条数据 3,group by:将取出的一条条数据进行分组,如果没有group by,则整 ...
- MJPEG 格式分析
MJPEG简介 MJPEG(技术即运动静止图像(或逐帧)压缩技术)是24-bit的"true-color"影像标准.MJPEG的工作是将RGB格式的影像转换成YCrCB格式,目的是 ...