v1.2.0: Umbenennung, zweizeiliger Erfolgstext, Umlaute
This commit is contained in:
@@ -14,12 +14,12 @@ use JTL\Plugin\PluginInterface;
|
|||||||
*
|
*
|
||||||
* Warum V1 statt der aktuellen ALTCHA-Widget-Version (v3)?
|
* Warum V1 statt der aktuellen ALTCHA-Widget-Version (v3)?
|
||||||
* Das offizielle JS-Widget v3 nutzt ein neueres, komplexeres Protokoll (PBKDF2/Argon2id/Scrypt mit
|
* Das offizielle JS-Widget v3 nutzt ein neueres, komplexeres Protokoll (PBKDF2/Argon2id/Scrypt mit
|
||||||
* Key-Prefix-Matching), fuer das es keine einfache, robust dokumentierte "Challenge direkt einbetten"-
|
* Key-Prefix-Matching), für das es keine einfache, robust dokumentierte "Challenge direkt einbetten"-
|
||||||
* Variante ohne zusaetzlichen Netzwerk-Endpunkt gibt. Das klassische V1-Protokoll (SHA-256 Hashcash:
|
* Variante ohne zusätzlichen Netzwerk-Endpunkt gibt. Das klassische V1-Protokoll (SHA-256 Hashcash:
|
||||||
* Client sucht per Brute-Force eine Zahl n, fuer die SHA256(salt+n) == challenge gilt) ist dagegen
|
* Client sucht per Brute-Force eine Zahl n, für die SHA256(salt+n) == challenge gilt) ist dagegen
|
||||||
* vollstaendig dokumentiert, einfach zu pruefen und wird hier zusammen mit einem kleinen eigenen
|
* vollständig dokumentiert, einfach zu prüfen und wird hier zusammen mit einem kleinen eigenen
|
||||||
* JS-Loeser (assets/fp-altcha.js) eingesetzt. Serverseitig kommt weiterhin der offizielle,
|
* JS-Löser (assets/fp-altcha.js) eingesetzt. Serverseitig kommt weiterhin der offizielle,
|
||||||
* unveraenderte ALTCHA-Code zum Einsatz (siehe src/Vendor/AltchaOrg/Altcha/V1).
|
* unveränderte ALTCHA-Code zum Einsatz (siehe src/Vendor/AltchaOrg/Altcha/V1).
|
||||||
*/
|
*/
|
||||||
class AltchaService
|
class AltchaService
|
||||||
{
|
{
|
||||||
@@ -28,8 +28,8 @@ class AltchaService
|
|||||||
private Altcha $altcha;
|
private Altcha $altcha;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string $pluginDir Basisverzeichnis des Plugins (__DIR__ aus Bootstrap.php), fuer die
|
* @param string $pluginDir Basisverzeichnis des Plugins (__DIR__ aus Bootstrap.php), für die
|
||||||
* automatische Erzeugung des HMAC-Geheimschluessels (siehe getHmacSecret()).
|
* automatische Erzeugung des HMAC-Geheimschlüssels (siehe getHmacSecret()).
|
||||||
*/
|
*/
|
||||||
public function __construct(PluginInterface $plugin, string $pluginDir)
|
public function __construct(PluginInterface $plugin, string $pluginDir)
|
||||||
{
|
{
|
||||||
@@ -64,7 +64,7 @@ class AltchaService
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Erzeugt eine neue Pruefung und liefert sie als Array, das 1:1 als JSON in die Seite
|
* Erzeugt eine neue Prüfung und liefert sie als Array, das 1:1 als JSON in die Seite
|
||||||
* eingebettet werden kann (siehe TemplateHandler).
|
* eingebettet werden kann (siehe TemplateHandler).
|
||||||
*
|
*
|
||||||
* @return array<string, string|int>
|
* @return array<string, string|int>
|
||||||
@@ -99,7 +99,7 @@ class AltchaService
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Prueft das per POST["altcha"] gesendete, base64-kodierte Loesungs-Payload.
|
* Prüft das per POST["altcha"] gesendete, base64-kodierte Lösungs-Payload.
|
||||||
*/
|
*/
|
||||||
public function verifyPost(): bool
|
public function verifyPost(): bool
|
||||||
{
|
{
|
||||||
@@ -114,23 +114,23 @@ class AltchaService
|
|||||||
if (!$this->isConfigured()) {
|
if (!$this->isConfigured()) {
|
||||||
// Kein HMAC-Secret hinterlegt -> Plugin ist nicht korrekt eingerichtet.
|
// Kein HMAC-Secret hinterlegt -> Plugin ist nicht korrekt eingerichtet.
|
||||||
// Sicherheitshalber ablehnen statt durchzulassen.
|
// Sicherheitshalber ablehnen statt durchzulassen.
|
||||||
$this->log('kein HMAC-Secret konfiguriert, Pruefung wird abgelehnt');
|
$this->log('kein HMAC-Secret konfiguriert, Prüfung wird abgelehnt');
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$verified = $this->altcha->verifySolution($field, true);
|
$verified = $this->altcha->verifySolution($field, true);
|
||||||
$this->log('Pruefungsergebnis: ' . ($verified ? 'erfolgreich' : 'fehlgeschlagen'));
|
$this->log('Prüfungsergebnis: ' . ($verified ? 'erfolgreich' : 'fehlgeschlagen'));
|
||||||
|
|
||||||
return $verified;
|
return $verified;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Liefert den HMAC-Geheimschluessel. Wurde im Plugin-Einstellungsfeld manuell ein Wert
|
* Liefert den HMAC-Geheimschlüssel. Wurde im Plugin-Einstellungsfeld manuell ein Wert
|
||||||
* eingetragen, hat dieser Vorrang (z. B. um denselben Schluessel bewusst auf mehreren
|
* eingetragen, hat dieser Vorrang (z. B. um denselben Schlüssel bewusst auf mehreren
|
||||||
* Installationen zu verwenden). Andernfalls wird beim allerersten Aufruf automatisch ein
|
* Installationen zu verwenden). Andernfalls wird beim allerersten Aufruf automatisch ein
|
||||||
* zufaelliger Schluessel erzeugt und in einer eigenen Datei im Plugin-Verzeichnis gespeichert,
|
* zufälliger Schlüssel erzeugt und in einer eigenen Datei im Plugin-Verzeichnis gespeichert,
|
||||||
* sodass keine manuelle Einrichtung noetig ist.
|
* sodass keine manuelle Einrichtung nötig ist.
|
||||||
*/
|
*/
|
||||||
private function getHmacSecret(): string
|
private function getHmacSecret(): string
|
||||||
{
|
{
|
||||||
@@ -162,17 +162,17 @@ class AltchaService
|
|||||||
|
|
||||||
$written = @\file_put_contents(
|
$written = @\file_put_contents(
|
||||||
$file,
|
$file,
|
||||||
"<?php\n\n// Automatisch erzeugter HMAC-Geheimschluessel -- nicht manuell bearbeiten.\n"
|
"<?php\n\n// Automatisch erzeugter HMAC-Geheimschlüssel -- nicht manuell bearbeiten.\n"
|
||||||
. 'return ' . \var_export($secret, true) . ";\n"
|
. 'return ' . \var_export($secret, true) . ";\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($written === false) {
|
if ($written === false) {
|
||||||
// Verzeichnis nicht beschreibbar o. Ae. -- sicherheitshalber "nicht konfiguriert"
|
// Verzeichnis nicht beschreibbar o. Ä. -- sicherheitshalber "nicht konfiguriert"
|
||||||
// melden (siehe isConfigured()/verifyPost()), statt bei jedem Aufruf einen neuen,
|
// melden (siehe isConfigured()/verifyPost()), statt bei jedem Aufruf einen neuen,
|
||||||
// nicht dauerhaften Schluessel zu verwenden.
|
// nicht dauerhaften Schlüssel zu verwenden.
|
||||||
$this->log(
|
$this->log(
|
||||||
'Konnte HMAC-Geheimschluessel nicht automatisch speichern (' . $file . '). '
|
'Konnte HMAC-Geheimschlüssel nicht automatisch speichern (' . $file . '). '
|
||||||
. 'Bitte Schreibrechte pruefen oder Schluessel manuell in den Einstellungen setzen.'
|
. 'Bitte Schreibrechte prüfen oder Schlüssel manuell in den Einstellungen setzen.'
|
||||||
);
|
);
|
||||||
|
|
||||||
return '';
|
return '';
|
||||||
|
|||||||
Reference in New Issue
Block a user