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

Side by Side Diff: net/proxy/proxy_service.cc

Issue 1996773002: Sanitize https:// URLs before sending them to PAC scripts. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 7 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 "net/proxy/proxy_service.h" 5 #include "net/proxy/proxy_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 void AddObserver(Observer* observer) override {} 342 void AddObserver(Observer* observer) override {}
343 void RemoveObserver(Observer* observer) override {} 343 void RemoveObserver(Observer* observer) override {}
344 ConfigAvailability GetLatestProxyConfig(ProxyConfig* config) override { 344 ConfigAvailability GetLatestProxyConfig(ProxyConfig* config) override {
345 return CONFIG_UNSET; 345 return CONFIG_UNSET;
346 } 346 }
347 }; 347 };
348 #endif 348 #endif
349 349
350 } // namespace 350 } // namespace
351 351
352 GURL SanitizeUrlForPacScript(const GURL& url,
353 SanitizeUrlForPacScriptPolicy policy) {
354 DCHECK(url.is_valid());
355 GURL::Replacements replacements;
356 replacements.ClearUsername();
357 replacements.ClearPassword();
358 replacements.ClearRef();
359
360 if (policy == SanitizeUrlForPacScriptPolicy::SAFE &&
361 url.SchemeIsCryptographic()) {
362 replacements.ClearPath();
363 replacements.ClearQuery();
364 }
mmenke 2016/05/19 22:33:23 An alternative approach would be to do: if (polic
eroman 2016/05/19 23:26:05 I added a TODO to explore that, will follow-up. T
365
366 return url.ReplaceComponents(replacements);
367 }
368
352 // ProxyService::InitProxyResolver -------------------------------------------- 369 // ProxyService::InitProxyResolver --------------------------------------------
353 370
354 // This glues together two asynchronous steps: 371 // This glues together two asynchronous steps:
355 // (1) ProxyScriptDecider -- try to fetch/validate a sequence of PAC scripts 372 // (1) ProxyScriptDecider -- try to fetch/validate a sequence of PAC scripts
356 // to figure out what we should configure against. 373 // to figure out what we should configure against.
357 // (2) Feed the fetched PAC script into the ProxyResolver. 374 // (2) Feed the fetched PAC script into the ProxyResolver.
358 // 375 //
359 // InitProxyResolver is a single-use class which encapsulates cancellation as 376 // InitProxyResolver is a single-use class which encapsulates cancellation as
360 // part of its destructor. Start() or StartSkipDecider() should be called just 377 // part of its destructor. Start() or StartSkipDecider() should be called just
361 // once. The instance can be destroyed at any time, and the request will be 378 // once. The instance can be destroyed at any time, and the request will be
(...skipping 681 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 1060
1044 // Notify our polling-based dependencies that a resolve is taking place. 1061 // Notify our polling-based dependencies that a resolve is taking place.
1045 // This way they can schedule their polls in response to network activity. 1062 // This way they can schedule their polls in response to network activity.
1046 config_service_->OnLazyPoll(); 1063 config_service_->OnLazyPoll();
1047 if (script_poller_.get()) 1064 if (script_poller_.get())
1048 script_poller_->OnLazyPoll(); 1065 script_poller_->OnLazyPoll();
1049 1066
1050 if (current_state_ == STATE_NONE) 1067 if (current_state_ == STATE_NONE)
1051 ApplyProxyConfigIfAvailable(); 1068 ApplyProxyConfigIfAvailable();
1052 1069
1053 // Strip away any reference fragments and the username/password, as they 1070 // Sanitize the URL before passing it on to the proxy resolver (i.e. PAC
1054 // are not relevant to proxy resolution. 1071 // script). The goal is to remove sensitive data (like embedded user names
1055 GURL url = SimplifyUrlForRequest(raw_url); 1072 // and password), and local data (i.e. reference fragment).
1073 GURL url =
1074 SanitizeUrlForPacScript(raw_url, sanitize_url_for_pac_script_policy_);
mmenke 2016/05/19 22:33:23 Should we only do this when we create the PacReque
eroman 2016/05/19 23:26:05 I hope to merge this CL to M52 so don't want to ch
1056 1075
1057 // Check if the request can be completed right away. (This is the case when 1076 // Check if the request can be completed right away. (This is the case when
1058 // using a direct connection for example). 1077 // using a direct connection for example).
1059 int rv = TryToCompleteSynchronously(url, load_flags, proxy_delegate, result); 1078 int rv = TryToCompleteSynchronously(url, load_flags, proxy_delegate, result);
1060 if (rv != ERR_IO_PENDING) { 1079 if (rv != ERR_IO_PENDING) {
1061 rv = DidFinishResolvingProxy( 1080 rv = DidFinishResolvingProxy(
1062 url, method, load_flags, proxy_delegate, result, rv, net_log, 1081 url, method, load_flags, proxy_delegate, result, rv, net_log,
1063 callback.is_null() ? TimeTicks() : TimeTicks::Now(), false); 1082 callback.is_null() ? TimeTicks() : TimeTicks::Now(), false);
1064 return rv; 1083 return rv;
1065 } 1084 }
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
1655 State previous_state = ResetProxyConfig(false); 1674 State previous_state = ResetProxyConfig(false);
1656 if (previous_state != STATE_NONE) 1675 if (previous_state != STATE_NONE)
1657 ApplyProxyConfigIfAvailable(); 1676 ApplyProxyConfigIfAvailable();
1658 } 1677 }
1659 1678
1660 void ProxyService::OnDNSChanged() { 1679 void ProxyService::OnDNSChanged() {
1661 OnIPAddressChanged(); 1680 OnIPAddressChanged();
1662 } 1681 }
1663 1682
1664 } // namespace net 1683 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698