HSTS-Optionen includeSubdomains und preload
Bernd Wurst

Bernd Wurst commited on 2017-02-18 18:05:36
Zeige 3 geänderte Dateien mit 52 Einfügungen und 3 Löschungen.

... ...
@@ -58,9 +58,11 @@
58 58
       if (cert == '0') {
59 59
         $('#cert').val('-1');
60 60
       }
61
-    } else
61
+    } else {
62 62
       $('#hsts_block').hide();
63 63
     }
64
+    show_hsts_opts();
65
+  }
64 66
 
65 67
   function hsts_preset( event ) {
66 68
     var seconds = $('#hsts_preset option:selected').val();
... ...
@@ -75,6 +77,34 @@
75 77
     }
76 78
   }
77 79
   
80
+  function show_hsts_opts( event ) {
81
+    var ssl = $('#ssl option:selected').val();
82
+    show_block = false;
83
+    preload_enabled = false;
84
+    if ( ssl == 'forward') {
85
+        if ($('#hsts').val() > 0) {
86
+            show_block = true;
87
+            if ($('#hsts_subdomains').prop('checked')) {
88
+                preload_enabled = true;
89
+            }
90
+        }
91
+
92
+    }
93
+    if (show_block) {
94
+        $('#hsts_preload_options').show();
95
+    } else {
96
+        $('#hsts_preload_options').hide();
97
+        $('#hsts_subdomains').prop('checked', false);
98
+        $('#hsts_preload').prop('checked', false);
99
+    }
100
+    if (preload_enabled) {
101
+        $('#hsts_preload').prop('disabled', false);
102
+    } else {
103
+        $('#hsts_preload').prop('disabled', true);
104
+        $('#hsts_preload').prop('checked', false);
105
+    }
106
+  }
107
+
78 108
 
79 109
 $(function() {
80 110
 
... ...
@@ -93,6 +123,9 @@ $(function() {
93 123
     $('#hsts_seconds').hide();
94 124
   }
95 125
   $('#hsts_preset').change(hsts_preset);
126
+  $('#hsts_select').change(show_hsts_opts);
127
+  $('#hsts_subdomains').change(show_hsts_opts);
128
+  show_hsts_opts();
96 129
   
97 130
 });
98 131
 
... ...
@@ -189,7 +189,9 @@ $form .= "
189 189
       ".($vhost['ssl'] == 'http' ? "<option value=\"http\" selected=\"selected\">kein HTTPS anbieten</option>" : '')."
190 190
       ".($vhost['ssl'] == 'https' ? "<option value=\"https\" selected=\"selected\">Konfiguration nur für HTTPS verwenden</option>" : '')."
191 191
       <option value=\"forward\" ".($vhost['ssl'] == 'forward' ? 'selected="selected"' : '')." >Ja, immer auf HTTPS umleiten</option>
192
-    </select>  <span id=\"hsts_block\" style=\"padding-top: 0.2em;\"> <label for=\"hsts\"><a title=\"Mit HSTS können Sie festlegen, dass eine bestimmte Website niemals ohne Verschlüsselung aufgerufen werden soll. Zudem werden Zertifikate strenger geprüft.\" href=\"https://de.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a>:</label> <span id=\"hsts_select\" style=\"display: none\">".html_select('hsts_preset', $hsts_preset_values, $hsts_preset_value)."</span> <span id=\"hsts_seconds\"><input type=\"text\" name=\"hsts\" id=\"hsts\" size=\"10\" style=\"text-align: right;\" value=\"{$hsts_value}\" /> Sekunden</span>
192
+    </select>  <span id=\"hsts_block\" style=\"padding-top: 0.2em;\"> <label for=\"hsts\"><a title=\"Mit HSTS können Sie festlegen, dass eine bestimmte Website niemals ohne Verschlüsselung aufgerufen werden soll. Zudem werden Zertifikate strenger geprüft.\" href=\"https://de.wikipedia.org/wiki/HTTP_Strict_Transport_Security\">HSTS</a>:</label> <span id=\"hsts_select\" style=\"display: none\">".html_select('hsts_preset', $hsts_preset_values, $hsts_preset_value)."</span> <span id=\"hsts_seconds\"><input type=\"text\" name=\"hsts\" id=\"hsts\" size=\"10\" style=\"text-align: right;\" value=\"{$hsts_value}\" /> Sekunden</span><br />
193
+    <span id=\"hsts_preload_options\"><input type=\"checkbox\" id=\"hsts_subdomains\" name=\"hsts_subdomains\" value=\"1\" ".(strstr($vhost['options'], 'hsts_subdomains') ? 'checked="checked"' : '')."/> <label for=\"hsts_subdomains\">Einschließlich aller Subdomains</label><br />
194
+    <input type=\"checkbox\" id=\"hsts_preload\" name=\"hsts_preload\" value=\"1\" ".(strstr($vhost['options'], 'hsts_preload') ? 'checked="checked"' : '')."/> <label for=\"hsts_preload\">Diese Domain soll in die Preload-Liste aufgenommen werden (diese Option setzt den <em>preload</em>-Parameter)</label></span>
193 195
     </span>
194 196
     </div>";
195 197
 
... ...
@@ -151,12 +151,20 @@ if ($_GET['action'] == 'edit')
151 151
   }
152 152
 
153 153
   $hsts = NULL;
154
+  $hsts_subdomains = false;
155
+  $hsts_preload = false;
154 156
   if (isset($_POST['hsts'])) {
155 157
     if (is_numeric($_POST['hsts']) && (int) $_POST['hsts'] > -2) {
156 158
       $hsts = (int) $_POST['hsts'];
157 159
     } else {
158 160
       system_failure('Es wurde ein ungültiger HSTS-Wert eingegeben. Dort sind nur Sekunden erlaubt.');
159 161
     }
162
+    if (isset($_POST['hsts_subdomains']) and $_POST['hsts_subdomains'] == 1) {
163
+      $hsts_subdomains = true;
164
+      if (isset($_POST['hsts_preload']) and $_POST['hsts_preload'] == 1) {
165
+        $hsts_preload = true;
166
+      }
167
+    }
160 168
   }
161 169
  
162 170
   $cert = (isset($_POST['cert']) ? (int) $_POST['cert'] : NULL);
... ...
@@ -208,13 +216,19 @@ if ($_GET['action'] == 'edit')
208 216
   $new_options = array();
209 217
   foreach ($old_options AS $op)
210 218
   {
211
-    if ($op != 'aliaswww') {
219
+    if ($op != 'aliaswww' && $op != 'hsts_subdomains' && $op != 'hsts_preload') {
212 220
       array_push($new_options, $op);
213 221
     }
214 222
   }
215 223
   if ($aliaswww) {
216 224
     array_push($new_options, 'aliaswww');
217 225
   }
226
+  if ($hsts_subdomains) {
227
+    array_push($new_options, 'hsts_subdomains');
228
+  }
229
+  if ($hsts_preload) {
230
+    array_push($new_options, 'hsts_preload');
231
+  }
218 232
   $letsencrypt = ($cert == 0 ? false : ($cert == -1 || cert_is_letsencrypt($cert)));
219 233
 
220 234
   if ($letsencrypt) {
221 235