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

Side by Side Diff: content/browser/child_process_security_policy_impl.cc

Issue 1917073002: Block webpages from navigating to view-source URLs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Delete layout tests Created 4 years, 6 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 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/child_process_security_policy_impl.h" 5 #include "content/browser/child_process_security_policy_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 void ChildProcessSecurityPolicyImpl::GrantRequestURL( 386 void ChildProcessSecurityPolicyImpl::GrantRequestURL(
387 int child_id, const GURL& url) { 387 int child_id, const GURL& url) {
388 388
389 if (!url.is_valid()) 389 if (!url.is_valid())
390 return; // Can't grant the capability to request invalid URLs. 390 return; // Can't grant the capability to request invalid URLs.
391 391
392 if (IsWebSafeScheme(url.scheme())) 392 if (IsWebSafeScheme(url.scheme()))
393 return; // The scheme has already been whitelisted for every child process. 393 return; // The scheme has already been whitelisted for every child process.
394 394
395 if (IsPseudoScheme(url.scheme())) { 395 if (IsPseudoScheme(url.scheme())) {
396 // The view-source scheme is a special case of a pseudo-URL that eventually
397 // results in requesting its embedded URL.
398 if (url.SchemeIs(kViewSourceScheme)) {
399 // URLs with the view-source scheme typically look like:
400 // view-source:http://www.google.com/a
401 // In order to request these URLs, the child_id needs to be able to
402 // request the embedded URL.
403 GrantRequestURL(child_id, GURL(url.GetContent()));
404 }
405
406 return; // Can't grant the capability to request pseudo schemes. 396 return; // Can't grant the capability to request pseudo schemes.
407 } 397 }
408 398
409 { 399 {
410 base::AutoLock lock(lock_); 400 base::AutoLock lock(lock_);
411 SecurityStateMap::iterator state = security_state_.find(child_id); 401 SecurityStateMap::iterator state = security_state_.find(child_id);
412 if (state == security_state_.end()) 402 if (state == security_state_.end())
413 return; 403 return;
414 404
415 // When the child process has been commanded to request this scheme, 405 // When the child process has been commanded to request this scheme,
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 568
579 state->second->RevokeReadRawCookies(); 569 state->second->RevokeReadRawCookies();
580 } 570 }
581 571
582 bool ChildProcessSecurityPolicyImpl::CanRequestURL( 572 bool ChildProcessSecurityPolicyImpl::CanRequestURL(
583 int child_id, const GURL& url) { 573 int child_id, const GURL& url) {
584 if (!url.is_valid()) 574 if (!url.is_valid())
585 return false; // Can't request invalid URLs. 575 return false; // Can't request invalid URLs.
586 576
587 if (IsPseudoScheme(url.scheme())) { 577 if (IsPseudoScheme(url.scheme())) {
588 // There are a number of special cases for pseudo schemes. 578 // Every child process can request <about:blank>.
589
590 if (url.SchemeIs(kViewSourceScheme)) {
591 // A view-source URL is allowed if the child process is permitted to
592 // request the embedded URL. Careful to avoid pointless recursion.
593 GURL child_url(url.GetContent());
594 if (child_url.SchemeIs(kViewSourceScheme) &&
595 url.SchemeIs(kViewSourceScheme))
596 return false;
597
598 return CanRequestURL(child_id, child_url);
599 }
600
601 if (base::LowerCaseEqualsASCII(url.spec(), url::kAboutBlankURL)) 579 if (base::LowerCaseEqualsASCII(url.spec(), url::kAboutBlankURL))
602 return true; // Every child process can request <about:blank>. 580 return true;
603 581 // URLs like <about:version>, <about:crash>, <view-source:...> shouldn't be
604 // URLs like <about:version> and <about:crash> shouldn't be requestable by 582 // requestable by any child process. Also, this case covers
605 // any child process. Also, this case covers <javascript:...>, which should 583 // <javascript:...>, which should be handled internally by the process and
606 // be handled internally by the process and not kicked up to the browser. 584 // not kicked up to the browser.
607 return false; 585 return false;
608 } 586 }
609 587
610 // If the process can commit the URL, it can request it. 588 // If the process can commit the URL, it can request it.
611 if (CanCommitURL(child_id, url)) 589 if (CanCommitURL(child_id, url))
612 return true; 590 return true;
613 591
614 // Also allow URLs destined for ShellExecute and not the browser itself. 592 // Also allow URLs destined for ShellExecute and not the browser itself.
615 return !GetContentClient()->browser()->IsHandledURL(url) && 593 return !GetContentClient()->browser()->IsHandledURL(url) &&
616 !net::URLRequest::IsHandledURL(url); 594 !net::URLRequest::IsHandledURL(url);
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 base::AutoLock lock(lock_); 848 base::AutoLock lock(lock_);
871 849
872 SecurityStateMap::iterator state = security_state_.find(child_id); 850 SecurityStateMap::iterator state = security_state_.find(child_id);
873 if (state == security_state_.end()) 851 if (state == security_state_.end())
874 return false; 852 return false;
875 853
876 return state->second->can_send_midi_sysex(); 854 return state->second->can_send_midi_sysex();
877 } 855 }
878 856
879 } // namespace content 857 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/browser_side_navigation_browsertest.cc ('k') | content/browser/child_process_security_policy_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698