Offtopic Projekte
Kommentare Zurück zur Übersicht

Noch mehr Escape Funktionen ...

Im Webdevolopement gibt es einen Grundsatz: Escape soviel wie nur möglich und lasse kein Risiko zu. Dafür gibt es genügend PHP Funktionen, z. B. htmlentities() oder str_replace() die zweifellos hervorragend sind. Ich empfehle auch die Verwendung der Standard Funktionen.

Da diese aber nicht für eine extreme Paranoia (wie meine eine ist) ausreicht, habe ich drei kurze Funktionen runtergetippt die ich hier vorstellen möchte.

Die erste Funktion löscht bestimmte vorgegebene Zeichen aus einem String. Dabei wird jedes Zeichen geprüft und dann entschieden welche im Returnstring landen. (Eine Zeichenprüfung auf Binärebene wäre in dem Script sicher besser gewesen!)

function ZeichenDEL($String$Zeichen) {
  $Ausgabe = "";
  $String = mb_str_split($String);
  $Zeichen = mb_str_split($Zeichen);
  foreach($String as $PruefString) {
    $Loeschen = false;
    foreach($Zeichen as $PruefZeichen) {
      if($PruefString == $PruefZeichen) {$Loeschen = true;}
      }
    if($Loeschen == false) {$Ausgabe = $Ausgabe . $PruefString;}
  }
  return $Ausgabe;
}

Hier ein Beispiel für den Aufruf der Funktion: Die Zeichen Ampersand und Semikolon werden aus dem String gelöscht!

$Eingabe = "SELECT * FROM Passworttabelle";
$Sicherheit = ";*";
echo ZeichenDEL($Eingabe$Sicherheit);

Das zweite PHP-Script wandelt bestimmte Zeichen in den HTML-Unicode. Dabei wird die nummerische Notation verwendet. Man kann wieder die zu ersetzenden Zeichen auswählen. Ohne Angabe der Zeichen werden alle gewandelt.

function WandelUCDEZ($String$Zeichen = NULL) {
  $Ausgabe = "";
  $String = mb_str_split($String);
  if(empty($Zeichen) || is_null($Zeichen)) {
    foreach($String as $PruefString) {
      $meinTempHEX = "&#" . mb_ord($PruefString) . ";";
      $Ausgabe = $Ausgabe . $meinTempHEX;
    }
  }
  else {
    $Zeichen = mb_str_split($Zeichen);
    foreach($String as $PruefString) {
      $WandelEs = false;
      foreach($Zeichen as $PruefZeichen) {
        if(mb_ord($PruefString) == mb_ord($PruefZeichen)) {$WandelEs = true;}
        }
      if($WandelEs == false) {$Ausgabe = $Ausgabe . $PruefString;}
      else {
        $meinTempHEX = "&#" . mb_ord($PruefString) . ";";
        $Ausgabe = $Ausgabe . $meinTempHEX;
      }
    }
  }
  return $Ausgabe;
}

Aufgerufen sieht das dann so aus:

$vorname = "Thomas <script></script> Maier";
$Sicherheit = "<>/";
echo WandelUCDEZ($vorname$Sicherheit);

Beziehungsweise, so eben:

Thomas &#60;script&#62;&#60;&#47;script&#62; Maier

Rückgängig macht man das dann wieder mit folgendem Script. Es können bestimmte Zeichen angegeben werden, oder eben das totale Demaskieren des Strings über jedes Vorkommen eines HTML-Unicode-Zeichen (Dezimal).

function RetourUCDEZ($Zeichenkette$zeichen = NULL) {
  $suche = "/&#([0-9])*;/";
  preg_match_all($suche$Zeichenkette$treffer);

  if(empty($zeichen) || is_null($zeichen)) {
    foreach($treffer[0] as $ucCode) {
      $ucDEZZahl = str_replace("&#", "", $ucCode);
      $ucDEZZahl = str_replace(";", "", $ucDEZZahl);
      $Zeichenkette = str_replace($ucCode, mb_chr($ucDEZZahl), $Zeichenkette);
    }
  }
  else {
    $zeichen = mb_str_split($zeichen);
    foreach($treffer[0] as $ucCode) {
      $ucDEZZahl = str_replace("&#", "", $ucCode);
      $ucDEZZahl = str_replace(";", "", $ucDEZZahl);
      foreach($zeichen as $pruefZeichen) {
        if($ucDEZZahl == mb_ord($pruefZeichen)) {
          $Zeichenkette = str_replace($ucCode, mb_chr($ucDEZZahl), $Zeichenkette);
        }
      }
    }
  }
  return $Zeichenkette;
}

So könnte die Funktion aufgerufen werden:

$vorname = "Thomas &#60;script&#62;&#60;&#47;script&#62; Maier";
$Sicherheit = ">/";
echo RetourUCDEZ($vorname$Sicherheit);

Demaskiert muss immer der Backslash und das Anführungszeichen, welches für die Stringdefinition verwendet wird. z. B. \\ oder \' ACHTUNG: Wenn ein Leerzeichen im Suchstring ist, dann wird es ebenfalls aus dem String gelöscht, bzw. gewandelt.
Es folgt eine Zeichenanalyse der Sonderzeichen welche für das Webdevolopement von Bedeutung sind. Also für HTML, CSS, JavaScript, PHP und MySQL.

WebDev-Zeichen

Kritische HTML Sonderzeichen

$Sicherheit = '<>/\'"&;';
$Paranoia = '<>/\'"&;=%!-\\#';
ZeichenBeschreibungNutzungHTML CodeUC-DEZUC-HEXURL Code
<öffnende spitze Klammer Erstes Zeichen eines HTML-Element&lt;&#60;&#x003C;%3C
>schließende spitze Klammer Letztes Zeichen eines HTML-Element&gt;&#62;&#x003E;%3E
/Schrägstrich Wird für ein schließendes HTML-Element benötigt.
Pfadzeichen in einer URL.
&sol;&#47;&#x002F;%2F
'Einfacher Apostroh, einfaches Anführungszeichen Umschließt den Attributwert.&apos;&#39;&#x0027;%27
"Anführungszeichen oben Umschließt den Attributwert&quot;&#34;&#x0022;%22
&Ampersand-Zeichen, kaufmännisches Und Erstes Zeichen eines escapten HTML-Zeichen.
Sonderzeichen im Query-String einer URL.
&amp;&#38;&#x0026;%26
;Strichpunkt, Semikolon Letztes Zeichen eines escapten HTML-Zeichen.&semi;&#59;&#x003B;%3B
=Ist-Gleich Zeichen Verbindet Attributnamen mit dem Attributwert.&equals;&#61;&#x003D;%3D
%Prozent Sonderzeichen in einer URL&percnt;&#37;&#x0025;%25
!Rufzeichen Für ein HTML Kommentar und DOCTYPE Definition&excl;&#33;&#x0021;%21
Minus Für ein HTML Kommentar&minus;&#8722;&#x2212;%E2%88%92
#Raute, Hashtag, Number Sprungmarke zu einer ID&num;&#35;&#x0023;%23

Kritische CSS Sonderzeichen

$Sicherheit = '{}";:';
$Paranoia = '{}";:\'#.%()*@>:';
ZeichenBeschreibungNutzungHTML CodeUC-DEZUC-HEXURL Code
{Öffnende geschwungene Klammer Öffnendes Zeichen für den CSS-Block&lbrace;&#123;&#x007B;%7B
}Schließende geschwungene Klammer Schließendes Zeichen für den CSS-Block&rbrace;&#125;&#x007D;%7D
!Rufzeichen Für eine !important definition&excl;&#33;&#x0021;%21
"Anführungszeichen oben String-Umschließung, z. B. für Schriftarten&quot;&#34;&#x0022;%22
'Einfacher Apostroh, einfaches Anführungszeichen Umschließt einen String&apos;&#39;&#x0027;%27
#Raute, Hashtag, Number ID-Selektor, Hex-Farben&num;&#35;&#x0023;%23
.Punkt Klassenselektor&period;&#46;&#x002E;%2E
%Prozent Relative Maßeinheiten in Prozent&percnt;&#37;&#x0025;%25
(Öffnende runde Klammer Für CSS-Funktionen&lpar;&#40;&#x0028;%28
)Schließende runde Klammer Für CSS-Funktionen&rpar;&#41;&#x0029;%29
*Asterisk, Stern, Multiplikationszeichen Universalselektor&ast;&#42;&#x002A;%2A
@At-Zeichen, Klammeraffe Leitet ein Media-Query oder Animation ein.&commat;&#64;&#x0040;%40
;Strichpunkt, Semikolon Zeilenabschluss nach jeder CSS-Anweisung&semi;&#59;&#x003B;%3B
>schließende spitze Klammer Child-Selektor&gt;&#62;&#x003E;%3E
:Doppelpunkt Zwischen CSS-Eigenschaft und CSS-Wert&colon;&#58;&#x003A;%3A

Kritische JavaScript Sonderzeichen

$Sicherheit = '<>;"\\/{\'}';
$Paranoia = '<>;"\\/{\'}()[]|&+=,!*:?';
ZeichenBeschreibungNutzungHTML CodeUC-DEZUC-HEXURL Code
;Strichpunkt, Semikolon Beendet einen Befehlsatz!&semi;&#59;&#x003B;%3B
"Anführungszeichen oben Umschließt einen String&quot;&#34;&#x0022;%22
'Einfacher Apostroh, einfaches Anführungszeichen Umschließt einen String&apos;&#39;&#x0027;%27
\Umgekehrter Schrägstrich Entwertung bzw. Maskierung eines Zeichen. z. B. für Apostrophen oder Steuerzeichen&bsol;&#92;&#x005C;%5C
/Schrägstrich Kommentarzeichen, Mathemtische Operation Division&sol;&#47;&#x002F;%2F
(Öffnende runde Klammer Öffnet eine Parameterübergabe bzw. Parameterprüfung z. B.: If oder Function&lpar;&#40;&#x0028;%28
)Schließende runde Klammer Schließt eine Parameterübergabe bzw. Parameterprüfung z. B.: If oder Function&rpar;&#41;&#x0029;%29
{Öffnende geschwungene Klammer Leitet einen Anweisungsblock ein. z. B. Function oder If&lbrace;&#123;&#x007B;%7B
}Schließende geschwungene Klammer Schließt einen Anweisgungsblock. z. B. Function oder If&rbrace;&#125;&#x007D;%7D
[Öffnende eckige Klammer Öffnendes Zeichen für ein Array&lbrack;&#91;&#x005B;%5B
]Schließende eckige Klammer Schließendes Zeichen für ein Array&rbrack;&#93;&#x005D;%5D
|Vertikale Linie Zwei vertikale Linien bedeuten OR (oder)&vert;&#124;&#x007C;%7C
&Ampersand-Zeichen, kaufmännisches Und Zwei Ampersand bedeuten AND (und)&amp;&#38;&#x0026;%26
+Plus Zeichen und Stringverkettung, Mathematische Operation&plus;&#43;&#x002B;%2B
=Ist-Gleich Zeichen Prüfzeichen auf Übereinstimmung, Wertzuweisung&equals;&#61;&#x003D;%3D
,Beistrich Trennzeichen für mehrere Parameter&comma;&#44;&#x002C;%2C
!Rufzeichen Negation einer Boolean Abfrage (z. B. ! ist Nicht)&excl;&#33;&#x0021;%21
<öffnende spitze Klammer Kleiner Zeichen&lt;&#60;&#x003C;%3C
>schließende spitze Klammer Größer&gt;&#62;&#x003E;%3E
*Asterisk, Stern, Multiplikationszeichen Kommentarzeichen, Mathemtische Operation Muliplikation&ast;&#42;&#x002A;%2A
:Doppelpunkt Für Objektliteral, Switch-Case&colon;&#58;&#x003A;%3A
?Fragezeichen Bedingter Operator&quest;&#63;&#x003F;%3F

Kritische PHP Sonderzeichen

$Sicherheit = ';"\'\\.*/';
$Paranoia = ';"\'\\.*/(){}[]|&+=,!<>:?';
ZeichenBeschreibungNutzungHTML CodeUC-DEZUC-HEXURL Code
;Strichpunkt, Semikolon Beendet einen Befehlsatz!&semi;&#59;&#x003B;%3B
"Anführungszeichen oben Umschließt einen String&quot;&#34;&#x0022;%22
'Einfacher Apostroh, einfaches Anführungszeichen Umschließt einen String&apos;&#39;&#x0027;%27
\Umgekehrter Schrägstrich Entwertung bzw. Maskierung eines Zeichen. z. B. für Apostrophen oder Steuerzeichen&bsol;&#92;&#x005C;%5C
.Punkt String- und Zeichenverkettung&period;&#46;&#x002E;%2E
/Schrägstrich Kommentarzeichen, Mathemtische Operation Division&sol;&#47;&#x002F;%2F
(Öffnende runde Klammer Öffnet eine Parameterübergabe bzw. Parameterprüfung z. B.: If oder Function&lpar;&#40;&#x0028;%28
)Schließende runde Klammer Schließt eine Parameterübergabe bzw. Parameterprüfung z. B.: If oder Function&rpar;&#41;&#x0029;%29
{Öffnende geschwungene Klammer Leitet einen Anweisungsblock ein. z. B. Function oder If&lbrace;&#123;&#x007B;%7B
}Schließende geschwungene Klammer Schließt einen Anweisgungsblock. z. B. Function oder If&rbrace;&#125;&#x007D;%7D
[Öffnende eckige Klammer Öffnendes Zeichen für ein Array&lbrack;&#91;&#x005B;%5B
]Schließende eckige Klammer Schließendes Zeichen für ein Array&rbrack;&#93;&#x005D;%5D
|Vertikale Linie Zwei vertikale Linien bedeuten OR (oder)&vert;&#124;&#x007C;%7C
&Ampersand-Zeichen, kaufmännisches Und Zwei Ampersand bedeuten AND (und)&amp;&#38;&#x0026;%26
+Plus Mathematische Operation&plus;&#43;&#x002B;%2B
=Ist-Gleich Zeichen Prüfzeichen auf Übereinstimmung, Wertzuweisung&equals;&#61;&#x003D;%3D
,Beistrich Trennzeichen für mehrere Parameter&comma;&#44;&#x002C;%2C
!Rufzeichen Negation einer Boolean Abfrage (z. B. ! ist Nicht)&excl;&#33;&#x0021;%21
<öffnende spitze Klammer Kleiner Zeichen&lt;&#60;&#x003C;%3C
>schließende spitze Klammer Größer, Zugriff auf Methoden und Eigenschaften in der OOP&gt;&#62;&#x003E;%3E
*Asterisk, Stern, Multiplikationszeichen Kommentarzeichen, Mathemtische Operation Muliplikation&ast;&#42;&#x002A;%2A
:Doppelpunkt Für Objektliteral, Switch-Case&colon;&#58;&#x003A;%3A
?Fragezeichen Bedingter Operator&quest;&#63;&#x003F;%3F

Kritische SQL Sonderzeichen

$Sicherheit = '\',-;"/*()';
$Paranoia = '\',-;=/*%_()[]^+.&|\\<>"';
ZeichenBeschreibungNutzungHTML CodeUC-DEZUC-HEXURL Code
'Einfacher Apostroh, einfaches Anführungszeichen Umschließt Textwerts Datensatz&apos;&#39;&#x0027;%27
,Beistrich Trennzeichen zwischen Spalten&comma;&#44;&#x002C;%2C
Minus Kommentarzeichen, zwei -- leiten einen Einzeiligen Kommentar ein, Umfang-Zeichen für Buchstaben oder Zahlen in einem Behälter, k[a-t]m, Subtraktionszeichen&minus;&#8722;&#x2212;%E2%88%92
;Strichpunkt, Semikolon Beendet ein SQL Query (Ist nicht zwingend notwendig)&semi;&#59;&#x003B;%3B
=Ist-Gleich Zeichen Vergleichszeichen (Übereinstimmung) von Konditionen, bzw. WHERE a = b&equals;&#61;&#x003D;%3D
/Schrägstrich Leitet und schließt ein mehrzeiliges Kommentar ein, Divisionszeichen&sol;&#47;&#x002F;%2F
Sternoperator Selektor für alle Spalten in einem SELECT Query, Für mehrzeilige Kommentare, /* ... */, Multiplikationszeichen&lowast;&#8727;&#x2217;%E2%88%97
%Prozent Repräsentationszeichen für kein, eines oder mehrer Zeichen, Modulo&percnt;&#37;&#x0025;%25
_Unterstrich, underline Repräsentationszeichen für ein einziges Zeichen&lowbar;&#95;&#x005F;%5F
(Öffnende runde Klammer Umschließt öffnend eine Gruppe (z. B. Spalten, oder Values) und SQL Funktionen z. B. COUNT()&lpar;&#40;&#x0028;%28
)Schließende runde Klammer Umschließt schließend eine Gruppe (z. B. Spalten, oder Values) und SQL Funktionen z. B. SUM()&rpar;&#41;&#x0029;%29
[Öffnende eckige Klammer Behälter für einzelne Repräsentationszeichen, l[eo]g findet leg, log aber nicht lag, lug&lbrack;&#91;&#x005B;%5B
]Schließende eckige Klammer Behälter für einzelne Repräsentationszeichen&rbrack;&#93;&#x005D;%5D
und SQL Ausschließendes Zeichen in einem Behälter, l[∧eo]g findet nicht leg, log aber lig, lug, lag, ldg, lrd usw.&and;&#8743;&#x2227;%E2%88%A7
+Plus Kombinationszeichen, z. B. für ALIAS, Additionszeichen&plus;&#43;&#x002B;%2B
.Punkt Kombinationszeichen, z. B. für Spaltenjoins&period;&#46;&#x002E;%2E
&Ampersand-Zeichen, kaufmännisches Und Bitweises UND&amp;&#38;&#x0026;%26
|Vertikale Linie Bitweises ODER&vert;&#124;&#x007C;%7C
>schließende spitze Klammer Größer-Zeichen&gt;&#62;&#x003E;%3E
<öffnende spitze Klammer Kleiner-Zeichen&lt;&#60;&#x003C;%3C
"Anführungszeichen oben Mögliche (Interpretationssache) Umschließung einer Zeichenkette&quot;&#34;&#x0022;%22
27. Apr 2025 - 22:13
Hier könnte dein Kommentar stehen!

Thomas Maier css4.at Logo
Thomas Maier Impressum OER: CC BY NC SA 2024-12-06