Benutzer-Werkzeuge

Webseiten-Werkzeuge


dev:284:security

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
dev:284:security [06.12.2020 11:15] – [Formular] Manuela v.d.Deckendev:284:security [06.12.2020 11:33] (aktuell) – [Begriffserklärung] Manuela v.d.Decken
Zeile 7: Zeile 7:
 WebsiteBaker stellt dafür die Klasse **bin\Security\CsfrTokens** zur Verfügung. Diese Klasse wird grundsätzlich immer automatisch vom Kern geladen und stellt ihre Methoden zur Verfügung. Die Konfiguration der Klasse und auch der Einsatz der Methoden wurde so einfach wie möglich gehalten. WebsiteBaker stellt dafür die Klasse **bin\Security\CsfrTokens** zur Verfügung. Diese Klasse wird grundsätzlich immer automatisch vom Kern geladen und stellt ihre Methoden zur Verfügung. Die Konfiguration der Klasse und auch der Einsatz der Methoden wurde so einfach wie möglich gehalten.
 ==== Begriffserklärung ==== ==== Begriffserklärung ====
-**//Token//** => Ehemals **FTAN**. Dieser Begriff wurde in Anlehnung an die **T**rans**A**ktions**N**ummern beim Onlinebanking gewählt, da auch sie nur für eine einmalige Transaktion innerhalb eines festgelegten Zeitraums gültig sind.\\ +**//TOKEN//** => Ehemals **FTAN**. Dieser Begriff wurde in Anlehnung an die **T**rans**A**ktions**N**ummern beim Onlinebanking gewählt, da auch sie nur für eine einmalige Transaktion innerhalb eines festgelegten Zeitraums gültig sind.\\ 
-Im Unterschied zu der einfachen, 4-stelligen TAN jedoch besteht ein vollständigr Token aus einem 6-stelligen, alphanumerischen Bezeichner sowie dem zugehörigen, ebenfalls 6-stelligen, alphanumerischen Wert. Sowohl Bezeichner als auch der Wert ändern sich bei jedem normalen Request auf Zufallsbasis. Bei Ajaxaufrufen ändert sich nur der Value-Anteil des Tokens. +Im Unterschied zu der einfachen, 4-stelligen TAN jedoch besteht ein vollständiger Token aus einem 6-stelligen, alphanumerischen Bezeichner sowie dem zugehörigen, ebenfalls 6-stelligen, alphanumerischen Wert. Sowohl Bezeichner als auch der Wert ändern sich bei jedem normalen Request auf Zufallsbasis. Bei Ajaxaufrufen ändert sich nur der Value-Anteil des Tokens. 
  
 **//IDKEY//** => Ist das zweite Standbein der Sicherung. Er wird hauptsächlich eingesetzt, um die Datensatz-IDs in Formularen und anderen Requests zu verschleiern. Die ID wird dabei durch einen einmaligen, 6-stelligen, alphanumerischen Wert ersetzt. Wird ein gleicher Wert mehrmals verschlüsselt, so bekommt er **immer** einen anderen Ersatzwert. Für jeden Request, für jedes Formular können beliebig viele IDKEYs erzeugt werden. Der IDKEY verhindert z.B. zuverlässig, dass auf Clientseite in einem Änderungsformular die reale DatensatzId vor dem Absenden manipuliert werden kann und dadurch unzulässigerweise ein falscher Datensatz geändert oder gar gelöscht wird. **//IDKEY//** => Ist das zweite Standbein der Sicherung. Er wird hauptsächlich eingesetzt, um die Datensatz-IDs in Formularen und anderen Requests zu verschleiern. Die ID wird dabei durch einen einmaligen, 6-stelligen, alphanumerischen Wert ersetzt. Wird ein gleicher Wert mehrmals verschlüsselt, so bekommt er **immer** einen anderen Ersatzwert. Für jeden Request, für jedes Formular können beliebig viele IDKEYs erzeugt werden. Der IDKEY verhindert z.B. zuverlässig, dass auf Clientseite in einem Änderungsformular die reale DatensatzId vor dem Absenden manipuliert werden kann und dadurch unzulässigerweise ein falscher Datensatz geändert oder gar gelöscht wird.
Zeile 109: Zeile 109:
 === Link === === Link ===
 <PHP> <PHP>
-use bin\security\SecureTokens+use bin\Security\CsfrTokens
-$aFtan SecureTokens::getFtan(); +$aToken CsfrTokens::getToken(); 
-$sOutput = '<a href="index.php?'.$aFtan['name'].'='.$aFtan['value'].'&record_id=' +$sOutput = '<a href="index.php?'.$aToken['name'].'='.$aToken['value'].'&record_id=' 
-         SecureTokens::getIdKy($iRecordId),'" title="xx">Tu was</a>';+         CsfrTokens::createIdKy($iRecordId),'" title="xx">Tu was</a>';
 echo $sOutput;     echo $sOutput;    
  
 // Auswertung // Auswertung
  
-if (SecureTokens::checkFtan()) {+if (CsfrTokens::checkToken()) {
     /* alles OK */     /* alles OK */
-    $iRecordId = SecureTokens::checkIdKey('record_id');+    $iRecordId = CsfrTokens::decodeIdKey('record_id');
     […]     […]
 } }
Zeile 125: Zeile 125:
 === Twig-Template === === Twig-Template ===
 <PHP> <PHP>
-use bin\security\SecureTokens;+use bin\Security\CsfrTokens;
 /* view-script */ /* view-script */
  
 $aTwigdata['TargetUrl'] = 'index.php'; $aTwigdata['TargetUrl'] = 'index.php';
-$aTwigdata['FTAN'     SecureTokens::getFtan(); +$aTwigdata['TOKEN'    CsfrTokens::getToken(); 
-$aTwigdata['RecordId'SecureTokens::getIdkey($record_id);+$aTwigdata['RecordId'CsfrTokens::createIdkey($record_id);
 </PHP> </PHP>
 <PHP> <PHP>
Zeile 137: Zeile 137:
 // Beispiel 1 // Beispiel 1
  <form method="post" action="{{ TargetUrl }}">  <form method="post" action="{{ TargetUrl }}">
-   <input type="hidden" name="{{ FTAN.name }}" value="{{ FTAN.value }}">+   <input type="hidden" name="{{ TOKEN.name }}" value="{{ TOKEN.value }}">
    <input type="hidden" name="record_id" value="{{ RecordId }}">    <input type="hidden" name="record_id" value="{{ RecordId }}">
    […]    […]
Zeile 143: Zeile 143:
  
 // Beispiel 2 // Beispiel 2
- <a href="{{ TargetUrl }}?{{ FTAN.name }}={{ FTAN.value }}&record_id={{ RecordId }}" title="xx">Tu was</a>+ <a href="{{ TargetUrl }}?{{ TOKEN.name }}={{ TOKEN.value }}&record_id={{ RecordId }}" title="xx">Tu was</a>
 </PHP> </PHP>
 <PHP> <PHP>
Zeile 149: Zeile 149:
  
 // Beispiel 1 + 2 // Beispiel 1 + 2
-use bin\security\SecureTokens+use bin\Security\CsfrTokens
-if (SecureTokens::checkFtan()) { +if (CsfrTokens::checkToken()) { 
-    $record_id = SecureTokens::checkIdKey('record_id');+    $record_id = CsfrTokens::decodeIdKey('record_id');
     […]     […]
 }    }   
Zeile 157: Zeile 157:
 ==== Einsatz mit AJAX ==== ==== Einsatz mit AJAX ====
  
-SecureTokens in Verbindung mit Ajax erfordert etwas mehr Aufmerksamkeit. Wobei es Unterschiede zwischen den Major-Versionen von WebsiteBaker gibt. +CsfrTokens in Verbindung mit Ajax erfordert etwas mehr Aufmerksamkeit. Wobei es Unterschiede zwischen den Major-Versionen von WebsiteBaker gibt. 
  
 <div alert>Die folgende Beschreibung gilt vorerst nur für Versionen der 2er Serie, deren Module noch mit der veralteten Technik arbeiten und PHP-Dateien im Modulverzeichnis direkt aufrufen.</div> <div alert>Die folgende Beschreibung gilt vorerst nur für Versionen der 2er Serie, deren Module noch mit der veralteten Technik arbeiten und PHP-Dateien im Modulverzeichnis direkt aufrufen.</div>
  
-Grundsätzlich gilt natürlich auch für Ajax-Requests die übliche Regel, dass Änderungsanfragen eine gültige FTAN mitliefern müssen. Prinzipiell ist das bei normalen Requests ja kein Problem, da als Antwort immer eine komplett neue Seite aufgebaut wird die automatisch auch neue, gültige FTANs etc. enthält.\\ +Grundsätzlich gilt natürlich auch für Ajax-Requests die übliche Regel, dass Änderungsanfragen einen gültigen TOKEN mitliefern müssen. Prinzipiell ist das bei normalen Requests ja kein Problem, da als Antwort immer eine komplett neue Seite aufgebaut wird die automatisch auch neue, gültige TOKENSs etc. enthält.\\ 
-Bei einem Ajax-Request hingegen wird die Seite ja **nicht** automatisch neu aufgebaut. Also werden auch für die verbrauchten keine neuen FTANs eingetragen. Jeder weitere Aufruf würde also deshalb zwingend eine Fehlermeldung zur Folge haben.\\ +Bei einem Ajax-Request hingegen wird die Seite ja **nicht** automatisch neu aufgebaut. Also werden auch für die verbrauchten keine neuen TOKENs eingetragen. Jeder weitere Aufruf würde also deshalb zwingend eine Fehlermeldung zur Folge haben.\\ 
-Im Rückschluss bedeutet das, dass in der Ajax-Antwort eine neue FTAN mit zurückgeliefert werden muss, die die bisherige ersetzt.\\+Im Rückschluss bedeutet das, dass in der Ajax-Antwort ein neuer TOKEN mit zurückgeliefert werden muss, die die bisherige ersetzt.\\
  
-Ab der Version 1.0.1 stellt SecureTokens in Verbindung mit WebsiteBaker ab 2.11.0 die FTAN-Unterstützung von AJAX-Requests bereit.\\+Ab der Version 1.0.1 stellt CsfrTokens die TOKEN-Unterstützung von AJAX-Requests bereit.\\
 Um diese neue Funktionalität nutzen zu können, müssen 4 Bedingungen erfüllt werden. Um diese neue Funktionalität nutzen zu können, müssen 4 Bedingungen erfüllt werden.
 <div info> <div info>
-  - Ein AJAX-Request muss selbstverständlich die beiden Teile der FTAN (name, value) senden. +  - Ein AJAX-Request muss selbstverständlich die beiden Teile des TOKEN (name, value) senden. 
   - Ein AJAX-Request muss den HTTP-Header **KIPA-XAJAX: 1** senden.   - Ein AJAX-Request muss den HTTP-Header **KIPA-XAJAX: 1** senden.
-  - Ein AJAX-Response muss vom Server ein **Ftan** Objekt zurück bringen. +  - Ein AJAX-Response muss vom Server ein **TOKEN** Objekt zurück bringen. 
-  - Browserseitig muss ein Script dafür sorgen, dass das zurückgelieferte **Ftan** Objekt verarbeitet wird (//RenewFtan(oFtan)//).+  - Browserseitig muss ein Script dafür sorgen, dass das zurückgelieferte **Token** Objekt verarbeitet wird (//RenewToken(oToken)//).
 </div> </div>
  
  
 **zu Punkt (1):**\\  **zu Punkt (1):**\\ 
- Bei GET Requests genügt ein einfacher URL-Argumentestring mit den FTAN-Werten <html>url?foo=xx&abcdef=123456</html> angehängt.\\  Für POST wird einfach ein zusätzliches Inputfeld <html><input type="hidden" name="abcdef" value="123456"></html> verwendet.+ Bei GET Requests genügt ein einfacher URL-Argumentestring mit den TOKEN-Werten <html>url?foo=xx&abcdef=123456</html> angehängt.\\  Für POST wird einfach ein zusätzliches Inputfeld <html><input type="hidden" name="abcdef" value="123456"></html> verwendet.
  
 **zu Punkt (2):**\\ **zu Punkt (2):**\\
Zeile 182: Zeile 182:
  
 **zu Punkt (3):**\\ **zu Punkt (3):**\\
- die Rückgabe des Ftan - Objektes. Das ist durch einen Einzeiler sehr einfach zu erledigen.\\ + die Rückgabe des Token-Objektes. Das ist durch einen Einzeiler sehr einfach zu erledigen.\\ 
-<php>echo json_encode(\bin\security\SecureTokens::getFtan());</php> Selbstverständlich kann dieser Einzeiler auch in jede komplexere Rückgaberoutine eingebaut werden.\\+<php>echo json_encode(\bin\Security\CsfrTokens::getToken());</php> Selbstverständlich kann dieser Einzeiler auch in jede komplexere Rückgaberoutine eingebaut werden.\\
  
 **zu Punkt (4):**\\ **zu Punkt (4):**\\
- Das ist der 'aufwändigste' Punkt. Das zurückgegebene FTAN Objekt muss an z.B. die Funktion RenewFtan() übergeben werden. Diese Funktion tauscht sämtliche alten FTANs im gesamten Dokument gegen die neu erhaltenen aus. Zusätzlich kann noch eine Funktion übergeben werden, die eine SessionProgressBar neu startet: <html>RenewFtan(oFtan, callBackFunction);</html> IDKEYs werden durch Ajax-Requests **nicht** verändert oder ungültig.+ Das ist der 'aufwändigste' Punkt. Das zurückgegebene TOKEN Objekt muss an z.B. die Funktion RenewToken() übergeben werden. Diese Funktion tauscht sämtliche alten TOKENs im gesamten Dokument gegen die neu erhaltenen aus. Zusätzlich kann noch eine Funktion übergeben werden, die eine SessionProgressBar neu startet: <html>RenewTokenFtan(oToken, callBackFunction);</html> IDKEYs werden durch Ajax-Requests **nicht** verändert oder ungültig.
  
  
-<code javascript FtanResponse.js>+<code javascript TokenResponse.js>
 <script> <script>
-function RenewFtan(oFtan, refreshProgress) { +function RenewToken(oToken, refreshProgress) { 
-    var i, ax, regex = new RegExp(oFtan.name + "="oFtan.previous, "g");+    var i, ax, regex = new RegExp(oToken.name + "="oToken.previous, "g");
     ax = document.links;     ax = document.links;
     for (i = 0; i < ax.length; i++) {     for (i = 0; i < ax.length; i++) {
-        ax[i].href = ax[i].href.replace(regex, oFtan.name + "="oFtan.value);+        ax[i].href = ax[i].href.replace(regex, oToken.name + "="oToken.value);
     }     }
-    ax = document.getElementsByName(oFtan.name);+    ax = document.getElementsByName(oToken.name);
     for (i = 0; i < ax.length; i++) {     for (i = 0; i < ax.length; i++) {
-        ax[i].value = oFtan.value;+        ax[i].value = oToken.value;
     }     }
     if (refreshProgress) {     if (refreshProgress) {
-        refreshProgress(oFtan.remain);+        refreshProgress(oToken.remain);
     }     }
 } }
Zeile 297: Zeile 297:
  * put the following line somwhere after the script above!  * put the following line somwhere after the script above!
  */  */
-updateKiSessionProgressBar({{ Ftan.remain }});+updateKiSessionProgressBar({{ oToken.remain }});
 </script> </script>
 </file> </file>
dev/284/security.1607253312.txt.gz · Zuletzt geändert: 06.12.2020 11:15 von Manuela v.d.Decken