Browse Source

[Web] Check smtp_tls_policy_map destination (more checks should be added)

andryyy 5 years ago
parent
commit
e91ddef717

+ 16 - 0
data/web/inc/functions.tls_policy_maps.inc.php

@@ -10,6 +10,14 @@ function tls_policy_maps($_action, $_data = null, $attr = null) {
       $dest = idn_to_ascii(trim($_data['dest']), 0, INTL_IDNA_VARIANT_UTS46);
       $dest = idn_to_ascii(trim($_data['dest']), 0, INTL_IDNA_VARIANT_UTS46);
       $policy = strtolower(trim($_data['policy']));
       $policy = strtolower(trim($_data['policy']));
       $parameters = (isset($_data['parameters']) && !empty($_data['parameters'])) ? $_data['parameters'] : '';
       $parameters = (isset($_data['parameters']) && !empty($_data['parameters'])) ? $_data['parameters'] : '';
+      if (empty($dest) || in_array($dest, array('.', '*', '@'))) {
+        $_SESSION['return'][] = array(
+          'type' => 'danger',
+          'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+          'msg' => 'tls_policy_map_dest_invalid'
+        );
+        return false;
+      }
       if (!empty($parameters)) {
       if (!empty($parameters)) {
         foreach (explode(' ', $parameters) as $parameter) {
         foreach (explode(' ', $parameters) as $parameter) {
           if (!preg_match('/(.+)\=(.+)/i', $parameter)) {
           if (!preg_match('/(.+)\=(.+)/i', $parameter)) {
@@ -66,6 +74,14 @@ function tls_policy_maps($_action, $_data = null, $attr = null) {
           );
           );
           continue;
           continue;
         }
         }
+        if (empty($dest) || in_array($dest, array('.', '*', '@'))) {
+          $_SESSION['return'][] = array(
+            'type' => 'danger',
+            'log' => array(__FUNCTION__, $_action, $_data, $_attr),
+            'msg' => 'tls_policy_map_dest_invalid'
+          );
+          return false;
+        }
         if (!empty($parameters)) {
         if (!empty($parameters)) {
           foreach (explode(' ', $parameters) as $parameter) {
           foreach (explode(' ', $parameters) as $parameter) {
             if (!preg_match('/(.+)\=(.+)/i', $parameter)) {
             if (!preg_match('/(.+)\=(.+)/i', $parameter)) {

+ 1 - 0
data/web/lang/lang.de.json

@@ -120,6 +120,7 @@
         "recipient_map_entry_exists": "Eine Empfängerumschreibung für Objekt \"%s\" existiert bereits",
         "recipient_map_entry_exists": "Eine Empfängerumschreibung für Objekt \"%s\" existiert bereits",
         "tls_policy_map_entry_exists": "Eine TLS-Richtlinie \"%s\" existiert bereits",
         "tls_policy_map_entry_exists": "Eine TLS-Richtlinie \"%s\" existiert bereits",
         "tls_policy_map_parameter_invalid": "Parameter ist ungültig",
         "tls_policy_map_parameter_invalid": "Parameter ist ungültig",
+        "tls_policy_map_dest_invalid": "Ziel ist ungültig",
         "temp_error": "Temporärer Fehler",
         "temp_error": "Temporärer Fehler",
         "text_empty": "Text darf nicht leer sein",
         "text_empty": "Text darf nicht leer sein",
         "subject_empty": "Betreff darf nicht leer sein",
         "subject_empty": "Betreff darf nicht leer sein",

+ 1 - 0
data/web/lang/lang.en.json

@@ -120,6 +120,7 @@
         "recipient_map_entry_exists": "A Recipient map entry \"%s\" exists",
         "recipient_map_entry_exists": "A Recipient map entry \"%s\" exists",
         "tls_policy_map_entry_exists": "A TLS policy map entry \"%s\" exists",
         "tls_policy_map_entry_exists": "A TLS policy map entry \"%s\" exists",
         "tls_policy_map_parameter_invalid": "Policy parameter is invalid",
         "tls_policy_map_parameter_invalid": "Policy parameter is invalid",
+        "tls_policy_map_dest_invalid": "Policy destination is invalid",
         "temp_error": "Temporary error",
         "temp_error": "Temporary error",
         "text_empty": "Text must not be empty",
         "text_empty": "Text must not be empty",
         "subject_empty": "Subject must not be empty",
         "subject_empty": "Subject must not be empty",