зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1583076 - Check navigate-to in ConsultCSPForRedirect since this runs for DocumentChannel. r=ckerschb
Differential Revision: https://phabricator.services.mozilla.com/D46742 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
53740310b4
Коммит
f6c8016c29
|
@ -252,35 +252,6 @@ CSPService::AsyncOnChannelRedirect(nsIChannel* oldChannel,
|
|||
|
||||
nsCOMPtr<nsILoadInfo> loadInfo = oldChannel->LoadInfo();
|
||||
|
||||
// Check CSP navigate-to
|
||||
// We need to enforce the CSP of the document that initiated the load,
|
||||
// which is the CSP to inherit.
|
||||
nsCOMPtr<nsIContentSecurityPolicy> cspToInherit = loadInfo->GetCspToInherit();
|
||||
if (cspToInherit) {
|
||||
bool allowsNavigateTo = false;
|
||||
rv = cspToInherit->GetAllowsNavigateTo(newUri, loadInfo,
|
||||
true, /* aWasRedirected */
|
||||
false, /* aEnforceWhitelist */
|
||||
&allowsNavigateTo);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!allowsNavigateTo) {
|
||||
oldChannel->Cancel(NS_ERROR_CSP_NAVIGATE_TO_VIOLATION);
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
// No need to continue processing if CSP is disabled or if the protocol
|
||||
// is *not* subject to CSP.
|
||||
// Please note, the correct way to opt-out of CSP using a custom
|
||||
// protocolHandler is to set one of the nsIProtocolHandler flags
|
||||
// that are whitelistet in subjectToCSP()
|
||||
nsContentPolicyType policyType = loadInfo->InternalContentPolicyType();
|
||||
if (!StaticPrefs::security_csp_enable() ||
|
||||
!subjectToCSP(newUri, policyType)) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* Since redirecting channels don't call into nsIContentPolicy, we call our
|
||||
* Content Policy implementation directly when redirects occur using the
|
||||
* information set in the LoadInfo when channels are created.
|
||||
|
@ -312,6 +283,36 @@ nsresult CSPService::ConsultCSPForRedirect(nsIURI* aOriginalURI,
|
|||
nsIURI* aNewURI,
|
||||
nsILoadInfo* aLoadInfo,
|
||||
Maybe<nsresult>& aCancelCode) {
|
||||
// Check CSP navigate-to
|
||||
// We need to enforce the CSP of the document that initiated the load,
|
||||
// which is the CSP to inherit.
|
||||
nsCOMPtr<nsIContentSecurityPolicy> cspToInherit =
|
||||
aLoadInfo->GetCspToInherit();
|
||||
if (cspToInherit) {
|
||||
bool allowsNavigateTo = false;
|
||||
nsresult rv = cspToInherit->GetAllowsNavigateTo(
|
||||
aNewURI, aLoadInfo, true, /* aWasRedirected */
|
||||
false, /* aEnforceWhitelist */
|
||||
&allowsNavigateTo);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (!allowsNavigateTo) {
|
||||
aCancelCode = Some(NS_ERROR_CSP_NAVIGATE_TO_VIOLATION);
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
|
||||
// No need to continue processing if CSP is disabled or if the protocol
|
||||
// is *not* subject to CSP.
|
||||
// Please note, the correct way to opt-out of CSP using a custom
|
||||
// protocolHandler is to set one of the nsIProtocolHandler flags
|
||||
// that are whitelistet in subjectToCSP()
|
||||
nsContentPolicyType policyType = aLoadInfo->InternalContentPolicyType();
|
||||
if (!StaticPrefs::security_csp_enable() ||
|
||||
!subjectToCSP(aNewURI, policyType)) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsICSPEventListener> cspEventListener;
|
||||
nsresult rv =
|
||||
aLoadInfo->GetCspEventListener(getter_AddRefs(cspEventListener));
|
||||
|
@ -321,7 +322,6 @@ nsresult CSPService::ConsultCSPForRedirect(nsIURI* aOriginalURI,
|
|||
rv = aLoadInfo->GetCspNonce(cspNonce);
|
||||
MOZ_ASSERT(NS_SUCCEEDED(rv));
|
||||
|
||||
nsContentPolicyType policyType = aLoadInfo->InternalContentPolicyType();
|
||||
bool isPreload = nsContentUtils::IsPreloadType(policyType);
|
||||
|
||||
/* On redirect, if the content policy is a preload type, rejecting the preload
|
||||
|
|
Загрузка…
Ссылка в новой задаче