Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
dev:284:security [06.12.2020 11:04] – [::getFtan] Manuela v.d.Decken | dev:284:security [06.12.2020 11:32] – [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, | Im Unterschied zu der einfachen, 4-stelligen TAN jedoch besteht ein vollständigr Token aus einem 6-stelligen, | ||
Zeile 56: | Zeile 56: | ||
| previous | string | vorheriger Wert des Tokens | | | previous | string | vorheriger Wert des Tokens | | ||
Der Wert ' | Der Wert ' | ||
- | === ::checkFtan | + | === ::checkToken |
- | **Prototype: | + | **Prototype: |
- | Es wird überprüft, | + | Es wird überprüft, |
- | Bei gültiger FTAN ist der Rückgabewert TRUE andernfalls FALSE. | + | Bei gültigem Token ist der Rückgabewert TRUE andernfalls FALSE. |
- | === ::getIdKey | + | === ::createIdKey |
- | **Prototype: | + | **Prototype: |
Der an die Methode übergebene Wert wird gesichert und dafür ein einmaliger, 6-stelliger, | Der an die Methode übergebene Wert wird gesichert und dafür ein einmaliger, 6-stelliger, | ||
Es können alle skalaren Datentypen übergeben werden: **// | Es können alle skalaren Datentypen übergeben werden: **// | ||
+ | === :: | ||
+ | **Prototype: | ||
+ | * **// | ||
=== :: | === :: | ||
**Prototype: | **Prototype: | ||
- | * **// | + | * **// |
- | === ::sanitizeLifeTime | + | === ::sanitizeTokenLifeTime |
- | **Prototype: | + | **Prototype: |
Ein übergebener Integer-Wert wird auf eine verfügbare Intervallstufe zwischen LIFETIME_MIN und LIFETIME_MAX korrigiert. Ein negativer Wert bei aktiviertem DEBUG-Modus auf DEBUG_LIFETIME, | Ein übergebener Integer-Wert wird auf eine verfügbare Intervallstufe zwischen LIFETIME_MIN und LIFETIME_MAX korrigiert. Ein negativer Wert bei aktiviertem DEBUG-Modus auf DEBUG_LIFETIME, | ||
=== :: | === :: | ||
Zeile 89: | Zeile 92: | ||
=== Formular === | === Formular === | ||
<PHP> | <PHP> | ||
- | use bin\security\SecureTokens; | + | use bin\Security\CsfrTokens; |
- | $aFtan = SecureTokens::getFtan(); | + | $aToken |
$sOutput = '< | $sOutput = '< | ||
- | . '< | + | . '< |
- | . '< | + | . '< |
echo $sOutput; | echo $sOutput; | ||
// Auswertung | // Auswertung | ||
- | if (SecureTokens::checkFtan()) { | + | if (CsfrTokens::checkToken()) { |
/* alles OK */ | /* alles OK */ | ||
- | $iRecordId = SecureTokens::checkIdKey(' | + | $iRecordId = CsfrTokens::decodeIdKey(' |
[…] | […] | ||
} | } | ||
Zeile 106: | Zeile 109: | ||
=== Link === | === Link === | ||
<PHP> | <PHP> | ||
- | use bin\security\SecureTokens; | + | use bin\Security\CsfrTokens; |
- | $aFtan = SecureTokens::getFtan(); | + | $aToken |
- | $sOutput = '<a href=" | + | $sOutput = '<a href=" |
- | | + | |
echo $sOutput; | echo $sOutput; | ||
// Auswertung | // Auswertung | ||
- | if (SecureTokens::checkFtan()) { | + | if (CsfrTokens::checkToken()) { |
/* alles OK */ | /* alles OK */ | ||
- | $iRecordId = SecureTokens::checkIdKey(' | + | $iRecordId = CsfrTokens::decodeIdKey(' |
[…] | […] | ||
} | } | ||
Zeile 122: | Zeile 125: | ||
=== Twig-Template === | === Twig-Template === | ||
<PHP> | <PHP> | ||
- | use bin\security\SecureTokens; | + | use bin\Security\CsfrTokens; |
/* view-script */ | /* view-script */ | ||
$aTwigdata[' | $aTwigdata[' | ||
- | $aTwigdata[' | + | $aTwigdata[' |
- | $aTwigdata[' | + | $aTwigdata[' |
</ | </ | ||
<PHP> | <PHP> | ||
Zeile 134: | Zeile 137: | ||
// Beispiel 1 | // Beispiel 1 | ||
< | < | ||
- | < | + | < |
< | < | ||
[…] | […] | ||
Zeile 140: | Zeile 143: | ||
// Beispiel 2 | // Beispiel 2 | ||
- | <a href=" | + | <a href=" |
</ | </ | ||
<PHP> | <PHP> | ||
Zeile 146: | 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 = CsfrTokens::decodeIdKey(' |
[…] | […] | ||
} | } | ||
Zeile 154: | Zeile 157: | ||
==== Einsatz mit AJAX ==== | ==== Einsatz mit AJAX ==== | ||
- | SecureTokens | + | CsfrTokens |
<div alert> | <div alert> | ||
- | Grundsätzlich gilt natürlich auch für Ajax-Requests die übliche Regel, dass Änderungsanfragen | + | Grundsätzlich gilt natürlich auch für Ajax-Requests die übliche Regel, dass Änderungsanfragen |
- | 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 |
- | Im Rückschluss bedeutet das, dass in der Ajax-Antwort | + | Im Rückschluss bedeutet das, dass in der Ajax-Antwort |
- | Ab der Version 1.0.1 stellt | + | Ab der Version 1.0.1 stellt |
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: | - Ein AJAX-Request muss den HTTP-Header **KIPA-XAJAX: | ||
- | - 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)//). |
</ | </ | ||
**zu Punkt (1): | **zu Punkt (1): | ||
- | Bei GET Requests genügt ein einfacher URL-Argumentestring mit den FTAN-Werten < | + | Bei GET Requests genügt ein einfacher URL-Argumentestring mit den TOKEN-Werten < |
**zu Punkt (2):**\\ | **zu Punkt (2):**\\ | ||
Zeile 179: | 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.\\ |
- | < | + | < |
**zu Punkt (4):**\\ | **zu Punkt (4):**\\ | ||
- | Das ist der ' | + | Das ist der ' |
- | <code javascript | + | <code javascript |
< | < | ||
- | function | + | function |
- | var i, ax, regex = new RegExp(oFtan.name + " | + | var i, ax, regex = new RegExp(oToken.name + " |
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, | + | ax[i].href = ax[i].href.replace(regex, |
} | } | ||
- | 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 294: | Zeile 297: | ||
* put the following line somwhere after the script above! | * put the following line somwhere after the script above! | ||
*/ | */ | ||
- | updateKiSessionProgressBar({{ | + | updateKiSessionProgressBar({{ |
</ | </ | ||
</ | </ |