Issue #2578 - Part 1: Implement preference for controlling same-origin policy

This commit is contained in:
FranklinDM 2024-01-25 13:40:39 +08:00 • committed by roytam1
commit 09b3c7a2d8
3 changed files with 11 additions and 1 deletions

View file

@ -76,6 +76,7 @@ nsIIOService *nsScriptSecurityManager::sIOService = nullptr;
nsIStringBundle *nsScriptSecurityManager::sStrBundle = nullptr; nsIStringBundle *nsScriptSecurityManager::sStrBundle = nullptr;
JSContext *nsScriptSecurityManager::sContext = nullptr; JSContext *nsScriptSecurityManager::sContext = nullptr;
bool nsScriptSecurityManager::sStrictFileOriginPolicy = true; bool nsScriptSecurityManager::sStrictFileOriginPolicy = true;
bool nsScriptSecurityManager::sSameOriginPolicy = true;
/////////////////////////// ///////////////////////////
// Convenience Functions // // Convenience Functions //
@ -607,7 +608,7 @@ nsScriptSecurityManager::CheckSameOriginURI(nsIURI* aSourceURI,
nsIURI* aTargetURI, nsIURI* aTargetURI,
bool reportError) bool reportError)
{ {
if (!SecurityCompareURIs(aSourceURI, aTargetURI)) if (sSameOriginPolicy && !SecurityCompareURIs(aSourceURI, aTargetURI))
{ {
if (reportError) { if (reportError) {
ReportError(nullptr, NS_LITERAL_STRING("CheckSameOriginError"), ReportError(nullptr, NS_LITERAL_STRING("CheckSameOriginError"),
@ -1434,10 +1435,13 @@ nsScriptSecurityManager::CanGetService(JSContext *cx,
const char sJSEnabledPrefName[] = "javascript.enabled"; const char sJSEnabledPrefName[] = "javascript.enabled";
const char sFileOriginPolicyPrefName[] = const char sFileOriginPolicyPrefName[] =
"security.fileuri.strict_origin_policy"; "security.fileuri.strict_origin_policy";
const char sSameOriginPolicyPrefName[] =
"security.same_origin_policy.enabled";
static const char* kObservedPrefs[] = { static const char* kObservedPrefs[] = {
sJSEnabledPrefName, sJSEnabledPrefName,
sFileOriginPolicyPrefName, sFileOriginPolicyPrefName,
sSameOriginPolicyPrefName,
"capability.policy.", "capability.policy.",
nullptr nullptr
}; };
@ -1593,6 +1597,8 @@ nsScriptSecurityManager::ScriptSecurityPrefChanged()
Preferences::GetBool(sJSEnabledPrefName, mIsJavaScriptEnabled); Preferences::GetBool(sJSEnabledPrefName, mIsJavaScriptEnabled);
sStrictFileOriginPolicy = sStrictFileOriginPolicy =
Preferences::GetBool(sFileOriginPolicyPrefName, false); Preferences::GetBool(sFileOriginPolicyPrefName, false);
sSameOriginPolicy =
Preferences::GetBool(sSameOriginPolicyPrefName, true);
mFileURIWhitelist.reset(); mFileURIWhitelist.reset();
} }

View file

@ -152,6 +152,7 @@ private:
} }
static bool sStrictFileOriginPolicy; static bool sStrictFileOriginPolicy;
static bool sSameOriginPolicy;
static nsIIOService *sIOService; static nsIIOService *sIOService;
static nsIStringBundle *sStrBundle; static nsIStringBundle *sStrBundle;

View file

@ -1338,6 +1338,9 @@ pref("javascript.options.streams", true);
pref("advanced.mailftp", false); pref("advanced.mailftp", false);
pref("image.animation_mode", "normal"); pref("image.animation_mode", "normal");
// Same-origin policy for all URIs.
pref("security.same_origin_policy.enabled", true);
// Same-origin policy for file URIs, "false" is traditional // Same-origin policy for file URIs, "false" is traditional
pref("security.fileuri.strict_origin_policy", true); pref("security.fileuri.strict_origin_policy", true);