Add warning to IndexPage if HTTP_SEND_X_FRAME_OPTIONS is disabled
authorTim Düsterhus <duesterhus@woltlab.com>
Fri, 27 Aug 2021 12:56:17 +0000 (14:56 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Fri, 27 Aug 2021 12:56:45 +0000 (14:56 +0200)
wcfsetup/install/files/acp/templates/index.tpl
wcfsetup/install/files/lib/acp/page/IndexPage.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index fd8b861160015be2fab2c36b61a027b193e05434..04458b0622dca3d18f96dc69522368e66bafea04 100644 (file)
        <p class="error">{lang}wcf.acp.index.tmpBroken{/lang}</p>
 {/if}
 
+{if !HTTP_SEND_X_FRAME_OPTIONS}
+       <p class="error">{lang}wcf.acp.index.allowsFrameEmbedding{/lang}</p>
+{/if}
+
 {if $recaptchaWithoutKey}
        <p class="error">{lang}wcf.acp.index.recaptchaWithoutKey{/lang}</p>
 {/if}
index f4cca83e440d94842618a59ed828a47e6a37e23f..c603764486733f242557d0ddf7e7dcc28a38234d 100755 (executable)
@@ -95,23 +95,31 @@ class IndexPage extends AbstractPage
             $usersAwaitingApproval = $statement->fetchSingleColumn();
         }
 
+        $optionCategories = OptionCacheBuilder::getInstance()->getData([], 'categories');
         $recaptchaWithoutKey = false;
         $recaptchaKeyLink = '';
         if (CAPTCHA_TYPE == 'com.woltlab.wcf.recaptcha' && (!RECAPTCHA_PUBLICKEY || !RECAPTCHA_PRIVATEKEY)) {
             $recaptchaWithoutKey = true;
 
-            $optionCategories = OptionCacheBuilder::getInstance()->getData([], 'categories');
-            $categorySecurity = $optionCategories['security'];
             $recaptchaKeyLink = LinkHandler::getInstance()->getLink(
                 'Option',
                 [
-                    'id' => $categorySecurity->categoryID,
+                    'id' => $optionCategories['security']->categoryID,
                     'optionName' => 'recaptcha_publickey',
                 ],
                 '#category_security.antispam'
             );
         }
 
+        $xFrameOptionsLink = LinkHandler::getInstance()->getLink(
+            'Option',
+            [
+                'id' => $optionCategories['general']->categoryID,
+                'optionName' => 'http_send_x_frame_options',
+            ],
+            '#category_general.system'
+        );
+
         $evaluationExpired = $evaluationPending = [];
         foreach (ApplicationHandler::getInstance()->getApplications() as $application) {
             if ($application->isTainted) {
@@ -177,6 +185,7 @@ class IndexPage extends AbstractPage
         WCF::getTPL()->assign([
             'recaptchaWithoutKey' => $recaptchaWithoutKey,
             'recaptchaKeyLink' => $recaptchaKeyLink,
+            'xFrameOptionsLink' => $xFrameOptionsLink,
             'server' => $this->server,
             'usersAwaitingApproval' => $usersAwaitingApproval,
             'evaluationExpired' => $evaluationExpired,
index cda8de6265e3e3813f4d6b014e8d27e54607d4b4..4f6871536a77fce4e6fb454997af22090b377c14 100644 (file)
@@ -967,6 +967,7 @@ ACHTUNG: Die oben genannten Meldungen sind stark gekürzt. Sie können Details z
                <item name="wcf.acp.index.tinyBuild"><![CDATA[Die Seitenbeschleunigung für Gäste verbessert die Ladezeiten für Besucher und Suchmaschinen, es wird empfohlen diese <a href="{link controller='Option' id=1 optionName="visitor_use_tiny_build"}#category_module.system{/link}">zu aktivieren</a>.]]></item>
                <item name="wcf.acp.index.recaptchaWithoutKey"><![CDATA[Die Nutzung von reCAPTCHA ohne einen individuellen Website-Schlüssel wird von Google nicht mehr unterstützt.<br><br>Für eine weitere Nutzung {if LANGUAGE_USE_INFORMAL_VARIANT}musst du{else}müssen Sie{/if} <a href="{$recaptchaKeyLink}">einen Schlüssel in den Optionen hinterlegen</a>, unterhalb des Eingabefeldes befindet sich eine Anleitung zum Anfordern des Schlüssels.]]></item>
                <item name="wcf.acp.index.missingLanguageItems"><![CDATA[Es wurden fehlende Sprachvariablen protokolliert (zuletzt: {@$missingLanguageItemsMTime|time}). {if LANGUAGE_USE_INFORMAL_VARIANT}Überprüfe{else}Überprüfen Sie{/if} die <a href="{link controller='DevtoolsMissingLanguageItemList'}{/link}">Liste der fehlenden Texte</a> für weitere Informationen.]]></item>
+               <item name="wcf.acp.index.allowsFrameEmbedding"><![CDATA[Die <a href="{$xFrameOptionsLink}">Option zur Unterbindung der Einbindung von WoltLab Suite in einem Frame</a> ist deaktiviert. Diese Option ist veraltet, wird in einer zukünftigen Version entfernt und die Einbindung generell unterbunden. Die Einbindung in einem Frame reduziert die Sicherheit, da <a href="https://de.wikipedia.org/wiki/Clickjacking" class="externalURL">Clickjacking-Angriffe</a> ermöglicht werden. Darüber hinaus können bestimmte Sicherheitsmerkmale von Cookies in Frames nicht verwendet werden.]]></item>
        </category>
        <category name="wcf.acp.label">
                <item name="wcf.acp.label.add"><![CDATA[Label hinzufügen]]></item>
index f232c9921863f061d23645c4f3c9e8bcf8a84f0a..522f21d4b5a68d2abb787962d05db8b12c646485 100644 (file)
@@ -945,6 +945,7 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.index.tinyBuild"><![CDATA[The accelerated guest view improves the page responsiveness and loading times for both visitors and search engines alike, please consider <a href="{link controller='Option' id=1 optionName="visitor_use_tiny_build"}#category_module.system{/link}">enabling it</a>.]]></item>
                <item name="wcf.acp.index.recaptchaWithoutKey"><![CDATA[Using reCAPTCHA without an individual website key is no longer supported by Google.<br><br>For further use you need to <a href="{$recaptchaKeyLink}">provide a key in your options</a>, please follow the instructions below the input field to obtain a key.]]></item>
                <item name="wcf.acp.index.missingLanguageItems"><![CDATA[Missing language items have been detected (last time: {@$missingLanguageItemsMTime|time}). Check the <a href="{link controller='DevtoolsMissingLanguageItemList'}{/link}">list of missing phrases</a> for more information.]]></item>
+               <item name="wcf.acp.index.allowsFrameEmbedding"><![CDATA[The <a href="{$xFrameOptionsLink}">option to prevent embedding of WoltLab Suite within a frame</a> is disabled. This option is deprecated, will be removed in a future version and embedding will be prevented in all cases. Allowing embedding reduces security by allowing <a href="https://en.wikipedia.org/wiki/Clickjacking" class="externalURL">Clickjacking attacks</a> to happen. In addition certain security features for cookies are not available within frames.]]></item>
        </category>
        <category name="wcf.acp.label">
                <item name="wcf.acp.label.add"><![CDATA[Add Label]]></item>