[3.0][UMGT] mcrypt_generic(): An empty string was passed

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

[3.0][UMGT] mcrypt_generic(): An empty string was passed

Beitrag von dave » 19.03.2015, 13:53:21

Ich habe für meine Anwendung via Konfiguration eingestellt, dass alle Datenbankfelder vom UMGT voll verschlüsselt werden sollen.

Code: Alles auswählen

; Verschlüsselung von Benutzerdaten
FieldEncryption.FieldNames = "EMail|Username|Password|FirstName|LastName|StreetName|StreetNumber|ZIPCode|City|DisplayName"
Registriert sich nun ein User nur mit den notwendigen Angaben, ohne die optionalen anzugeben (Vorname, Nachname, Strasse etc.) wird immer ein Fehler geworfen:
mcrypt_generic(): An empty string was passed
/is/htdocs/.../APF/modules/usermanagement/biz/provider/UserFieldEncryptionProvider.php Line 139
Zum einen unschön, zum anderen meckert PHP natürlich auch wieder, wenn ich mich mit dem User anmelde und da irgendwas in der DB fehlt. Eine Möglichkeit wäre ja nun ,das Werfen des Fehlers mit einem "!" zu unterdrücken. Ist aber nicht so ganz Sinn der Sache, oder?
(Wir machen das zwar in der Firma gerne mal, aber auch nur, damit die Maschine erstmal irgendwie weiter läuft :D)

Wie wollen wir das umgehen? Eine Idee wäre ja, via Konfiguration Pflichtfelder angeben zu können. Alle optionalen Felder werden dann ausgelassen (wäre aber auch wieder grösserer Aufwand).

Benutzeravatar
dr.e.
Administrator
Beiträge: 4525
Registriert: 04.11.2007, 16:13:53

Re: [3.0][UMGT] mcrypt_generic(): An empty string was passed

Beitrag von dr.e. » 20.03.2015, 00:06:38

Hallo dave,

mein Vorschlag ist, die Methode encrypt() entsprechend so zu ändern, dass leere Werte auch einen leeren "verschlüsselten" Wert ergeben. Das könnte so aussehen:

Code: Alles auswählen

public static function encrypt($value, $encryptionHandler = null) {

   if (empty($value)) {
      return $value;
   }

   $closeHandler = false;
   if ($encryptionHandler === null) {
      $encryptionHandler = self::getEncryptionHandler();
      $closeHandler = true;
   }

   mcrypt_generic_init($encryptionHandler, self::getConcatenatedEncryptionKey($encryptionHandler), self::$encryptionIV);
   $crypted = base64_encode(mcrypt_generic($encryptionHandler, $value));
   mcrypt_generic_deinit($encryptionHandler);

   if ($closeHandler) {
      self::closeEncryptionhandler($encryptionHandler);
   }

   return $crypted;
} 
Kannst du das bei dir mal testen?
Viele Grüße,
Christian

Benutzeravatar
dave
Beiträge: 903
Registriert: 04.02.2011, 19:03:57
Wohnort: Berlin
Kontaktdaten:

Re: [3.0][UMGT] mcrypt_generic(): An empty string was passed

Beitrag von dave » 20.03.2015, 11:07:42

Hallo Christian, grünes Licht! Funktioniert. Musste das ganze aber auch für die Funktion decrypt() mit übernehmen.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4525
Registriert: 04.11.2007, 16:13:53

Re: [3.0][UMGT] mcrypt_generic(): An empty string was passed

Beitrag von dr.e. » 21.03.2015, 00:46:58

Perfekt. Ist in den master für 3.0 übernommen.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast