Ansicht
Dokumentation

ABENESCAPE_FUNCTIONS - ESCAPE FUNCTIONS

ABENESCAPE_FUNCTIONS - ESCAPE FUNCTIONS

TXBHW - Original Tax Base Amount in Local Currency   CPI1466 during Backup  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- escape

... escape( val = text format = format ) ...

Wirkung

Diese eingebaute Funktion gibt den Inhalt der Zeichenkette in text zurück, wobei bestimmte Sonderzeichen nach einer in format angegebenen Regel durch Fluchtsymbole maskiert werden.

Die möglichen Werte von format sind in der Klasse CL_ABAP_FORMAT als Konstanten mit dem Präfix "E_" definiert. Jeder Wert definiert welche Sonderzeichen wie ersetzt werden. Es gibt Regeln für Sonderzeichen in Markup-Sprachen (XML und HTML), in URIs und URLs, in JSON, sowie in regulären Ausdrücken und Zeichenketten-Templates. Eine wichtige Rolle spielt auch das Verhindern von Angriffen über Cross Site Scripting (XSS) auf Web-Anwendungen.

Für format werden Datenobjekte vom Typ i erwartet. Ein ungültiger Wert für format führt zu einer Ausnahme der Klasse CX_SY_STRG_PAR_VAL. Das Programm DEMO_ESCAPE demonstriert für alle Zeichen, deren Codes zwischen x00 und xFF liegen, die Wirkung aller zugehörigen Formatangaben aus der Klasse CL_ABAP_FORMAT. Die oberste Zeile enthält die Namen der Konstanten aus der Klasse CL_ABAP_FORMAT ohne den Präfix "E_". Die übrigen Zeilen zeigen die Wirkung auf die in den ersten zwei Spalten aufgeführten Zeichen.

Die Funktion kann an allgemeinen und zeichenartigen Ausdruckspositionen angegeben werden. Der Rückgabewert ist jeweils vom Typ string.

Regeln für Markup-Sprachen inklusive JavaScript

Das Programm DEMO_ESCAPE_MARKUP zeigt die Ersetzungsregeln für Markup-Sprachen. Die Formate mit "_JS" im Namen sind für Inhalte mit JavaScript-Anteilen vorgesehen. Die folgende Tabelle fasst die Ersetzungsregeln zusammen:

Format & < > " ' TAB LF CR BS FF \ ctrl-char
E_XML_TEXT & < - - - - - - - - - -
E_XML_ATTR & < - " ' - - - -
E_XML_ATTR_DQ & < - " - - - - -
E_XML_ATTR_SQ & < - - ' - - - -
E_HTML_TEXT & < > - - - - - - - - -
E_HTML_ATTR & < > " ' - - - - - - -
E_HTML_ATTR_DQ & < > " - - - - - - - -
E_HTML_ATTR_SQ & < > - ' - - - - - - -
E_HTML_JS - - - \" \' \t \n \r \b \f \\ \xhh
E_HTML_JS_HTML & < > " ' \t \n \r \b \f \\ \xhh

Die erste Spalte enthält die Namen der Formate aus der Klasse CL_ABAP_FORMAT. Die übrigen Spalten zeigen durch welche Fluchtsymbole die in der ersten Zeile aufgeführten Sonderzeichen ersetzt werden. Alle anderen Zeichen bleiben unverändert. TAB, LF CR, BS, und FF bezeichnen die Steuerzeichen für Tabulator, Line Feed, Carriage Return, Backspace und Form Feed, denen in 7-Bit-ASCII die Codes x09, x0A, x0D, x08 und x0C zugeordnet sind. ctrl-char steht für alle Steuerzeichen mit Codes kleiner x20, die nicht durch die explizit aufgeführten abgedeckt sind. Bei erfolgt teilweise eine Umsetzung nach \xhh, wobei hh der Hexadezimalwert des Codes ist. Wenn in einem Feld kein Wert (-) aufgeführt ist, bleibt das betreffende Sonderzeichen unverändert.

Beispiel

Das Ergebnis der folgenden Maskierung ist IF a < b.

Zeichenkettenfunktionen, escape für HTML

Regeln für URLs und URIs

Das Programm DEMO_ESCAPE_URL_URI zeigt die Ersetzungsregeln für URLs und URIs. Alle Zeichen mit Codes zwischen x00 und 7F werden mit Ausnahme der Zeichen aus folgender Tabelle nach %hh umgesetzt, wobei hh der Hexadezimalwert des Codes ist. Beim Format URI_1 werden Hochkommata nicht nach %hh umgesetzt, sondern verdoppelt.

Format unkonvertierte Zeichen
E_URL [0-9], [a-z], [A-Z], !, $, ', (, ), *, +, ,, -, ., _, &, /, :, ;, =, ?, @
E_URL_FULL [0-9], [a-z], [A-Z], !, $, ', (, ), *, +, ,, -, ., _
E_URI [0-9], [a-z], [A-Z], !, $, ', (, ), *, +, ,, -, ., _, &, /, :, ;, =, ?, @, ~, #, [, ]
E_URI_FULL [0-9], [a-z], [A-Z], -, ., _, ~
E_URI_1 [0-9], [a-z], [A-Z], !, $, (, ), *, +, ,, -, ., _, ;, =, @, ~, [, ]

Alle Zeichen mit Codes ab x80 werden in ihre UTF-8-Darstellung konvertiert. Je nach Zeichen werden 1 bis 4 Bytes in der Form %hh dargestellt, wobei hh der Hexadezimalwert eines Bytes ist.

Beispiel

Das Ergebnis der folgenden Maskierung ist Numbers%3A%201,%202.

Regeln für JSON

Das Programm DEMO_ESCAPE_JSON zeigt die Ersetzungsregel des Formats E_JSON_STRING für JSON. Den Sonderzeichen " und \ wird das Fluchtsymbol \ vorangestellt. Steuerzeichen mit den Codes x08, x09, x0A, x0C und x0D werden jeweils durch \b, \t, \n, \f und \r ersetzt. Alle übrigen Zeichen mit Codes kleiner x20 werden in eine vierstellige Hexadezimaldarstellung mit vorangestelltem \u konvertiert. Alle anderen Zeichen bleiben unverändert.

Beispiel

Das Ergebnis der folgenden Maskierung ist This is a backslash: \"\\\".

Regeln für reguläre Ausdrücke

Es gibt unterschiedliche Formate für die unterschiedlichen Varianten der durch ABAP unterstützte Syntax für reguläre Ausdrücke. Mit dem Programm DEMO_ESCAPE_REGEX werden die Ersetzungsregeln für die Formate E_PCRE (reguläre PCRE-Ausdrücke), E_PCRE_EXTENDED (reguläre im erweiterten Modus kompilierten PCRE-Ausdrücke) und E_REGEX (reguläre POSIX-Ausdrücke, obsolet) demonstriert. Den Sonderzeichen von regulären Ausdrücken wird das zugehörige Fluchtsymbol \ vorangestellt. Steuerzeichen mit den Codes x08, x09, x0A, x0B, x0C und x0D werden jeweils durch \b, \t, \n, \v, \f und \r ersetzt.

Beispiel

Das Ergebnis der folgenden Maskierung ist "\." matches one, "\*" matches many".

Regeln für Zeichenketten-Templates

Das Programm DEMO_ESCAPE_STRING_TEMPLATE zeigt die Ersetzungsregel des Formats E_STRING_TPL für Zeichenketten-Templates. Den Sonderzeichen von Zeichenketten-Templates (|, \, {, }) wird das zugehörige Fluchtsymbol \ vorangestellt. Steuerzeichen mit den Codes x09, x0A und x0D werden jeweils durch \t, \n und \r ersetzt.

Beispiel

Das Ergebnis der folgenden Maskierung ist Special characters: \|, \\, \{, \}.

Regeln für Cross Site Scripting

Das Programm DEMO_ESCAPE_XSS zeigt die Ersetzungsregeln der Formate E_XSS_..., die es erlauben, Angriffe über Cross Site Scripting (XSS) auf Web-Anwendungen zu verhindern. Es gibt Regeln für XML/HTML-Inhalte, JavasScript-Inhalte, Cascading Style Sheets (CSS) und URL-Inhalte.

Die Regeln für XSS fassen die Regeln für einzelne Formate zusammen und gehen über diese hinaus. Sie unterscheiden sich vor allem zu denen von Markup-Sprachen inklusive JavaScript (siehe oben). Die erweiterten Regeln sollen in ABAP-Programmen zum Schutz vor Cross Site Scripting eingesetzt werden, in denen Inhalte aus unsicheren Quellen konstruiert werden. Die oben bereits aufgeführten finden Umwandlungen werden wie folgt ersetzt bzw. erweitert:

  • Markup-Sprachen: Format E_XSS_ML. Alle Zeichen bis auf [0-9], [a-z], [A-Z], ,, -, ., _ und Steuerzeichen werden nach &#xhh; oder &#xhhhh; umgewandelt, wobei hh bzw. hhhh der Hexadezimalwert des Codes ist. Alle Steuerzeichen werden nach umgewandelt.
  • JavaScript: Format E_XSS_JS. Alle Zeichen bis auf [0-9], [a-z], [A-Z], ,, ., und _ werden nach \xhh oder \uhhhh umgewandelt, wobei hh bzw hhhh der Hexadezimalwert des Codes ist.
  • URLs und URIs: Format E_XSS_URL. Alle Zeichen bis auf [0-9], [a-z], [A-Z], *, -, . und _ werden nach %hh umgewandelt, wobei hh der Hexadezimalwert des Codes ist. Alle Zeichen mit Codes ab x80 werden in ihre UTF-8-Darstellung konvertiert. Je nach Zeichen werden 1 bis 4 Bytes in der Form %hh dargestellt, wobei hh der Hexadezimalwert eines Bytes ist.
  • CSS: Format E_XSS_CSS. Alle Zeichen bis auf [0-9], [a-z] und [A-Z] werden nach \hh bzw. \hhhh umgewandelt, wobei hh bzw. hhhh der Hexadezimalwert des Codes ist. Hinter hh bzw hhhh wird ein Leerzeichen eingefügt, wenn das folgende Zeichen eine gültige Hexadezimalziffer ist.

Wenn das Format aus der Klasse CL_ABAP_FORMAT die zusätzliche Endung "_NU" hat, werden alle Zeichen mit Codes größer xFF in eine vierstellige Hexadezimaldarstellung konvertiert, die je nach Art des Inhalts unterschiedlich gekennzeichnet ist. Die zusätzliche Endung "_7B" bedeutet 7 Bit und wirkt ebenfalls auf Zeichen mit Codes größer xFF.

Hinweise

  • Die Klasse CL_ABAP_DYN_PRG enthält Methoden ESCAPE_XSS_..., welche Aufrufe der eingebauten Funktion escape mit den Formaten E_XSS_... verschalen. In der Regel wird die direkte Verwendung der eingebauten Funktion empfohlen.
  • Die Verwendung von escape mit Regeln für XSS wird zum Schutz vor Cross Site Scripting empfohlen, kann aber in manchen Fällen nicht ausreichend sein. Beispielsweise empfiehlt es sich, eine unsichere URL eher über eine Einschlussliste zu überprüfen, damit neben XSS auch ein Phishing-Angriff ausgeschlossen werden kann. Um Code Injections vollständig auszuschließen, sollte JavaScript nie dynamisch aus unsicheren Quellen erzeugt werden.

Beispiel

Das Ergebnis der folgenden Maskierung ist German#x3a;#x22;#xf6;#x22;.

Zeichenkettenfunktionen, escape für XSS

Ausnahmen

Behandelbare Ausnahmen

CX_SY_CONVERSION_CODEPAGE_EX

  • Ursache: Bei der Konvertierung nach UTF-8 kann ein Zeichen nicht konvertiert werden. Dies kann nur bei Zeichen aus dem Surrogat-Bereich auftreten. Dem Ausnahmeobjekt kann die Stelle und der Code des Zeichens entnommen werden.
    Laufzeitfehler: CONVT_CHARACTER

CX_SY_STRG_PAR_VAL

  • Ursache: Ungültige Angabe in format.
    Laufzeitfehler: STRG_ILLEGAL_PAR





General Data in Customer Master   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 35852 Date: 20240523 Time: 153813     sap01-206 ( 378 ms )