summaryrefslogtreecommitdiffstats
path: root/docshell
diff options
context:
space:
mode:
authorjanekptacijarabaci <janekptacijarabaci@seznam.cz>2018-04-22 18:51:38 +0200
committerjanekptacijarabaci <janekptacijarabaci@seznam.cz>2018-04-22 18:51:38 +0200
commit1b4c4256ee7705724b02919b4d432b2a391bcd04 (patch)
treeba2e9442b55afaa4288c096ae81ca64c8523b3c2 /docshell
parentc30ebdac27c93b57e368c69e9c13055a17229992 (diff)
downloadUXP-1b4c4256ee7705724b02919b4d432b2a391bcd04.tar
UXP-1b4c4256ee7705724b02919b4d432b2a391bcd04.tar.gz
UXP-1b4c4256ee7705724b02919b4d432b2a391bcd04.tar.lz
UXP-1b4c4256ee7705724b02919b4d432b2a391bcd04.tar.xz
UXP-1b4c4256ee7705724b02919b4d432b2a391bcd04.zip
moebius#223: Consider blocking top level window data: URIs (part 1/3 without tests)
https://github.com/MoonchildProductions/moebius/pull/223
Diffstat (limited to 'docshell')
-rw-r--r--docshell/base/nsDocShell.cpp16
-rw-r--r--docshell/base/nsDocShell.h1
2 files changed, 16 insertions, 1 deletions
diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
index 58c182cbb..ae97a7c9e 100644
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -42,6 +42,7 @@
#include "nsArray.h"
#include "nsArrayUtils.h"
+#include "nsContentSecurityManager.h"
#include "nsICaptivePortalService.h"
#include "nsIDOMStorage.h"
#include "nsIContentViewer.h"
@@ -9884,6 +9885,15 @@ nsDocShell::InternalLoad(nsIURI* aURI,
contentType = nsIContentPolicy::TYPE_DOCUMENT;
}
+ if (!nsContentSecurityManager::AllowTopLevelNavigationToDataURI(
+ aURI,
+ contentType,
+ aTriggeringPrincipal,
+ (aLoadType == LOAD_NORMAL_EXTERNAL))) {
+ // logging to console happens within AllowTopLevelNavigationToDataURI
+ return NS_OK;
+ }
+
// If there's no targetDocShell, that means we are about to create a new window,
// perform a content policy check before creating the window.
if (!targetDocShell) {
@@ -10232,8 +10242,11 @@ nsDocShell::InternalLoad(nsIURI* aURI,
}
}
+ bool loadFromExternal = false;
+
// Before going any further vet loads initiated by external programs.
if (aLoadType == LOAD_NORMAL_EXTERNAL) {
+ loadFromExternal = true;
// Disallow external chrome: loads targetted at content windows
bool isChrome = false;
if (NS_SUCCEEDED(aURI->SchemeIs("chrome", &isChrome)) && isChrome) {
@@ -10724,7 +10737,7 @@ nsDocShell::InternalLoad(nsIURI* aURI,
nsINetworkPredictor::PREDICT_LOAD, this, nullptr);
nsCOMPtr<nsIRequest> req;
- rv = DoURILoad(aURI, aOriginalURI, aLoadReplace, aReferrer,
+ rv = DoURILoad(aURI, aOriginalURI, aLoadReplace, loadFromExternal, aReferrer,
!(aFlags & INTERNAL_LOAD_FLAGS_DONT_SEND_REFERRER),
aReferrerPolicy,
aTriggeringPrincipal, principalToInherit, aTypeHint,
@@ -10804,6 +10817,7 @@ nsresult
nsDocShell::DoURILoad(nsIURI* aURI,
nsIURI* aOriginalURI,
bool aLoadReplace,
+ bool aLoadFromExternal,
nsIURI* aReferrerURI,
bool aSendReferrer,
uint32_t aReferrerPolicy,
diff --git a/docshell/base/nsDocShell.h b/docshell/base/nsDocShell.h
index 3ca9e0b34..549d7f540 100644
--- a/docshell/base/nsDocShell.h
+++ b/docshell/base/nsDocShell.h
@@ -369,6 +369,7 @@ protected:
nsresult DoURILoad(nsIURI* aURI,
nsIURI* aOriginalURI,
bool aLoadReplace,
+ bool aLoadFromExternal,
nsIURI* aReferrer,
bool aSendReferrer,
uint32_t aReferrerPolicy,