Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(849)

Side by Side Diff: Source/core/frame/csp/ContentSecurityPolicy.cpp

Issue 822483002: CSP 'self' is not interpreted correctly for iframes, Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google, Inc. All rights reserved. 2 * Copyright (C) 2011 Google, Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 148
149 void ContentSecurityPolicy::bindToExecutionContext(ExecutionContext* executionCo ntext) 149 void ContentSecurityPolicy::bindToExecutionContext(ExecutionContext* executionCo ntext)
150 { 150 {
151 m_executionContext = executionContext; 151 m_executionContext = executionContext;
152 applyPolicySideEffectsToExecutionContext(); 152 applyPolicySideEffectsToExecutionContext();
153 } 153 }
154 154
155 void ContentSecurityPolicy::applyPolicySideEffectsToExecutionContext() 155 void ContentSecurityPolicy::applyPolicySideEffectsToExecutionContext()
156 { 156 {
157 ASSERT(m_executionContext); 157 ASSERT(m_executionContext);
158 // Ensure that 'self' processes correctly. 158 // Ensure that 'self' processes correctly. Note that this uses the URL of
159 m_selfProtocol = securityOrigin()->protocol(); 159 // the context, not the security origin. That's because in the sandbox
160 m_selfSource = adoptPtr(new CSPSource(this, m_selfProtocol, securityOrigin() ->host(), securityOrigin()->port(), String(), CSPSource::NoWildcard, CSPSource:: NoWildcard)); 160 // case, the origin is 'unique' (which, in practice, gives an empty scheme,
161 // host, and port). However, regarding matching the 'self' source, the CSP
162 // spec
163 // (https://w3c.github.io/webappsec/specs/content-security-policy/#match-sou rce-expression)
164 // reads: "Return does match if the URL has the same scheme, host, and port
165 // as the protected resource’s URL". Thus, if Chrome were to store the
166 // 'unqiue' origin in m_selfSource, it would match nothing, even though it
167 // should match resources that are loaded at the same URL it loaded from.
168 m_selfProtocol = m_executionContext->url().protocol();
169 m_selfSource = adoptPtr(new CSPSource(this, m_selfProtocol, m_executionConte xt->url().host(), m_executionContext->url().port(), String(), CSPSource::NoWildc ard, CSPSource::NoWildcard));
161 170
162 // If we're in a Document, set the referrer policy, mixed content checking, and sandbox 171 // If we're in a Document, set the referrer policy, mixed content checking, and sandbox
163 // flags, then dump all the parsing error messages, then poke at histograms. 172 // flags, then dump all the parsing error messages, then poke at histograms.
164 if (Document* document = this->document()) { 173 if (Document* document = this->document()) {
165 document->enforceSandboxFlags(m_sandboxMask); 174 document->enforceSandboxFlags(m_sandboxMask);
166 if (m_enforceStrictMixedContentChecking) 175 if (m_enforceStrictMixedContentChecking)
167 document->enforceStrictMixedContentChecking(); 176 document->enforceStrictMixedContentChecking();
168 if (didSetReferrerPolicy()) 177 if (didSetReferrerPolicy())
169 document->setReferrerPolicy(m_referrerPolicy); 178 document->setReferrerPolicy(m_referrerPolicy);
170 179
(...skipping 718 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 // Collisions have no security impact, so we can save space by storing only the string's hash rather than the whole report. 898 // Collisions have no security impact, so we can save space by storing only the string's hash rather than the whole report.
890 return !m_violationReportsSent.contains(report.impl()->hash()); 899 return !m_violationReportsSent.contains(report.impl()->hash());
891 } 900 }
892 901
893 void ContentSecurityPolicy::didSendViolationReport(const String& report) 902 void ContentSecurityPolicy::didSendViolationReport(const String& report)
894 { 903 {
895 m_violationReportsSent.add(report.impl()->hash()); 904 m_violationReportsSent.add(report.impl()->hash());
896 } 905 }
897 906
898 } // namespace blink 907 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698