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

Side by Side Diff: third_party/WebKit/Source/platform/weborigin/SecurityOrigin.cpp

Issue 2702503002: Block renderer-initiated main frame navigations to data URLs (Closed)
Patch Set: kinuko comments Created 3 years, 8 months 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2007 Apple Inc. All rights reserved. 2 * Copyright (C) 2007 Apple 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 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 12 matching lines...) Expand all
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */ 27 */
28 28
29 #include "platform/weborigin/SecurityOrigin.h" 29 #include "platform/weborigin/SecurityOrigin.h"
30 30
31 #include <memory> 31 #include <memory>
32 #include "platform/RuntimeEnabledFeatures.h" 32 #include "platform/RuntimeEnabledFeatures.h"
33 #include "platform/network/NetworkUtils.h"
33 #include "platform/weborigin/KURL.h" 34 #include "platform/weborigin/KURL.h"
34 #include "platform/weborigin/KnownPorts.h" 35 #include "platform/weborigin/KnownPorts.h"
35 #include "platform/weborigin/SchemeRegistry.h" 36 #include "platform/weborigin/SchemeRegistry.h"
36 #include "platform/weborigin/SecurityPolicy.h" 37 #include "platform/weborigin/SecurityPolicy.h"
37 #include "platform/weborigin/URLSecurityOriginMap.h" 38 #include "platform/weborigin/URLSecurityOriginMap.h"
38 #include "platform/wtf/HexNumber.h" 39 #include "platform/wtf/HexNumber.h"
39 #include "platform/wtf/NotFound.h" 40 #include "platform/wtf/NotFound.h"
40 #include "platform/wtf/PtrUtil.h" 41 #include "platform/wtf/PtrUtil.h"
41 #include "platform/wtf/StdLibExtras.h" 42 #include "platform/wtf/StdLibExtras.h"
42 #include "platform/wtf/text/StringBuilder.h" 43 #include "platform/wtf/text/StringBuilder.h"
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 return protocol_ == protocol || 330 return protocol_ == protocol ||
330 SecurityPolicy::IsAccessToURLWhiteListed(this, url); 331 SecurityPolicy::IsAccessToURLWhiteListed(this, url);
331 332
332 if (SchemeRegistry::ShouldTreatURLSchemeAsLocal(protocol)) 333 if (SchemeRegistry::ShouldTreatURLSchemeAsLocal(protocol))
333 return CanLoadLocalResources() || 334 return CanLoadLocalResources() ||
334 SecurityPolicy::IsAccessToURLWhiteListed(this, url); 335 SecurityPolicy::IsAccessToURLWhiteListed(this, url);
335 336
336 return true; 337 return true;
337 } 338 }
338 339
340 bool SecurityOrigin::CanNavigateInTopFrame(const KURL& url) const {
341 if (universal_access_)
dcheng 2017/04/15 00:11:24 I assume this exception is required for layout tes
meacer 2017/04/15 00:53:53 As we discussed offline, it's not required for lay
342 return true;
343
344 // Block content-initiated loads of data URLs in the top frame. If the mime
345 // type is supported, the URL will eventually be rendered, so block it here.
346 // Otherwise, the load might be handled by a plugin or end up as a download,
347 // so allow it to let the embedder figure out what to do with it.
348 if (url.ProtocolIsData() && NetworkUtils::IsDataURLMimeTypeSupported(url)) {
349 return false;
350 }
351 return true;
352 }
353
339 bool SecurityOrigin::IsPotentiallyTrustworthy() const { 354 bool SecurityOrigin::IsPotentiallyTrustworthy() const {
340 ASSERT(protocol_ != "data"); 355 ASSERT(protocol_ != "data");
341 if (IsUnique()) 356 if (IsUnique())
342 return is_unique_origin_potentially_trustworthy_; 357 return is_unique_origin_potentially_trustworthy_;
343 358
344 if (SchemeRegistry::ShouldTreatURLSchemeAsSecure(protocol_) || IsLocal() || 359 if (SchemeRegistry::ShouldTreatURLSchemeAsSecure(protocol_) || IsLocal() ||
345 IsLocalhost()) 360 IsLocalhost())
346 return true; 361 return true;
347 362
348 if (SecurityPolicy::IsOriginWhiteListedTrustworthy(*this)) 363 if (SecurityPolicy::IsOriginWhiteListedTrustworthy(*this))
(...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 &canon_output, &out_host); 632 &canon_output, &out_host);
618 } else { 633 } else {
619 *success = url::CanonicalizeHost(host.Characters16(), 634 *success = url::CanonicalizeHost(host.Characters16(),
620 url::Component(0, host.length()), 635 url::Component(0, host.length()),
621 &canon_output, &out_host); 636 &canon_output, &out_host);
622 } 637 }
623 return String::FromUTF8(canon_output.data(), canon_output.length()); 638 return String::FromUTF8(canon_output.data(), canon_output.length());
624 } 639 }
625 640
626 } // namespace blink 641 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698