Skip to content

ABAP Keyword Documentation →  ABAP - Security Notes →  Security Risks Caused by Input from Outside →  SQL Injections 

SQL Injections Using Generic Programming

Generic programming is the most unsafe of all dynamic programming techniques. In principle, the ABAP command injections cover all individual security risks that can occur in dynamic programming, and most significantly SQL injections. The more generic the programming, the more difficult it is to prevent SQL injections from exploiting input that originates outside the program.

Other versions: 7.31 | 7.40 | 7.54


Example

The following program section demonstrates static embedded of Native SQL in a program generated using GENERATE SUBROUTINE POOL. Before ADBC was introduced, this was the only way of creating dynamic parts in Native SQL. In the case in question, the input key must be escaped using the method ESCAPE_QUOTES of the class CL_ABAP_DYN_PRG to prevent SQL injections. In a more realistic example, of course, host variables would be the preferred method.

DATA source TYPE TABLE OF string WITH EMPTY KEY. 
source = VALUE #( 
  ( `PROGRAM.` ) 
  ( `FORM exec_sql CHANGING name TYPE string.` ) 
  ( `  EXEC SQL.` ) 
  ( `    SELECT carrname` ) 
  ( `           INTO :name` ) 
  ( `           FROM scarr` ) 
  ( `          WHERE mandt  = 'sy-mandt' AND` ) 
  ( `                 carrid = 'key'` ) 
  ( `  ENDEXEC.` ) 
  ( `ENDFORM.`                               ) ). 

DATA key TYPE string. 
cl_demo_input=>request( CHANGING field = key ). 
REPLACE `sy-mandt` IN TABLE source WITH sy-mandt. 
REPLACE `key` IN TABLE source 
              WITH cl_abap_dyn_prg=>escape_quotes( to_upper( key ) ). 

DATA name TYPE string. 
GENERATE SUBROUTINE POOL source NAME DATA(pool). 
IF sy-subrc = 0. 
  PERFORM exec_sql IN PROGRAM (pool) CHANGING name. 
ENDIF. 
cl_demo_output=>display( name ).