diff options
author | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-25 02:31:01 +0000 |
---|---|---|
committer | thakis@chromium.org <thakis@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-25 02:31:01 +0000 |
commit | 3b700c860d3297726f9f403ce2ef5345040dfaca (patch) | |
tree | 77bccb24312613ef36c1b990397c031eacb5cc89 | |
parent | 041331daa0d4fa060ed158639b579e973cfa14c0 (diff) | |
download | chromium_src-3b700c860d3297726f9f403ce2ef5345040dfaca.zip chromium_src-3b700c860d3297726f9f403ce2ef5345040dfaca.tar.gz chromium_src-3b700c860d3297726f9f403ce2ef5345040dfaca.tar.bz2 |
Revert 98168, it caused compile errors on mac:
/b/build/slave/cr-mac-rel/build/src/chrome/browser/safe_browsing/browser_feature_extractor.cc:456:12:error: no member named 'set_suffix_prefix_hash' in 'safe_browsing::ClientPhishingRequest'
request->set_suffix_prefix_hash(
~~~~~~~ ^
1 error generated.
/b/build/slave/cr-mac-rel/build/src/chrome/browser/safe_browsing/client_side_detection_service.cc:281:20:error: no member named 'has_suffix_prefix_hash' in 'safe_browsing::ClientPhishingRequest'
if (full_request.has_suffix_prefix_hash()) {
~~~~~~~~~~~~ ^
/b/build/slave/cr-mac-rel/build/src/chrome/browser/safe_browsing/client_side_detection_service.cc:282:24:error: no member named 'set_suffix_prefix_hash' in 'safe_browsing::ClientPhishingRequest'
sanitized_request->set_suffix_prefix_hash(
~~~~~~~~~~~~~~~~~ ^
/b/build/slave/cr-mac-rel/build/src/chrome/browser/safe_browsing/client_side_detection_service.cc:283:22:error: no member named 'suffix_prefix_hash' in 'safe_browsing::ClientPhishingRequest'
full_request.suffix_prefix_hash());
~~~~~~~~~~~~ ^
3 errors generated.
Add support for client-side phishing detection for non-UMA users.
In this mode, a sanitized pingback is sent that does not include the URL or any
tokens extracted from the URL or page content. Currently, this feature is
behind a command-line flag.
BUG=none
TEST=ClientSideDetectionServiceTest,BrowserFeatureExtractorTest
Review URL: http://codereview.chromium.org/7635010
TBR=bryner@chromium.org
Review URL: http://codereview.chromium.org/7746011
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@98170 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/safe_browsing/browser_feature_extractor.cc | 45 | ||||
-rw-r--r-- | chrome/browser/safe_browsing/browser_feature_extractor.h | 68 | ||||
-rw-r--r-- | chrome/browser/safe_browsing/browser_feature_extractor_unittest.cc | 50 | ||||
-rw-r--r-- | chrome/browser/safe_browsing/browser_features.cc | 33 | ||||
-rw-r--r-- | chrome/browser/safe_browsing/browser_features.h | 76 | ||||
-rw-r--r-- | chrome/browser/safe_browsing/client_side_detection_service.cc | 89 | ||||
-rw-r--r-- | chrome/browser/safe_browsing/client_side_detection_service.h | 22 | ||||
-rw-r--r-- | chrome/browser/safe_browsing/client_side_detection_service_unittest.cc | 105 | ||||
-rw-r--r-- | chrome/browser/safe_browsing/safe_browsing_service.cc | 9 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 2 | ||||
-rw-r--r-- | chrome/common/chrome_switches.cc | 6 | ||||
-rw-r--r-- | chrome/common/chrome_switches.h | 1 | ||||
-rw-r--r-- | chrome/common/safe_browsing/csd.proto | 9 | ||||
-rw-r--r-- | chrome/renderer/safe_browsing/features.h | 6 |
14 files changed, 90 insertions, 431 deletions
diff --git a/chrome/browser/safe_browsing/browser_feature_extractor.cc b/chrome/browser/safe_browsing/browser_feature_extractor.cc index 9cf4770..fc7933e 100644 --- a/chrome/browser/safe_browsing/browser_feature_extractor.cc +++ b/chrome/browser/safe_browsing/browser_feature_extractor.cc @@ -15,19 +15,39 @@ #include "chrome/browser/history/history.h" #include "chrome/browser/history/history_types.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/safe_browsing/browser_features.h" #include "chrome/browser/safe_browsing/client_side_detection_service.h" -#include "chrome/browser/safe_browsing/safe_browsing_util.h" #include "content/common/page_transition_types.h" #include "content/browser/browser_thread.h" #include "content/browser/cancelable_request.h" #include "content/browser/tab_contents/tab_contents.h" -#include "crypto/sha2.h" #include "googleurl/src/gurl.h" namespace safe_browsing { - -const int BrowserFeatureExtractor::kSuffixPrefixHashLength = 5; +namespace features { +const char kUrlHistoryVisitCount[] = "UrlHistoryVisitCount"; +const char kUrlHistoryTypedCount[] = "UrlHistoryTypedCount"; +const char kUrlHistoryLinkCount[] = "UrlHistoryLinkCount"; +const char kUrlHistoryVisitCountMoreThan24hAgo[] = + "UrlHistoryVisitCountMoreThan24hAgo"; +const char kHttpHostVisitCount[] = "HttpHostVisitCount"; +const char kHttpsHostVisitCount[] = "HttpsHostVisitCount"; +const char kFirstHttpHostVisitMoreThan24hAgo[] = + "FirstHttpHostVisitMoreThan24hAgo"; +const char kFirstHttpsHostVisitMoreThan24hAgo[] = + "FirstHttpsHostVisitMoreThan24hAgo"; + +const char kHostPrefix[] = "Host"; +const char kRedirectPrefix[] = "Redirect"; +const char kReferrer[] = "Referrer"; +const char kHasSSLReferrer[] = "HasSSLReferrer"; +const char kPageTransitionType[] = "PageTransitionType"; +const char kIsFirstNavigation[] = "IsFirstNavigation"; +const char kBadIpFetch[] = "BadIpFetch="; +const char kSafeBrowsingMaliciousUrl[] = "SafeBrowsingMaliciousUrl="; +const char kSafeBrowsingOriginalUrl[] = "SafeBrowsingOriginalUrl="; +const char kSafeBrowsingIsSubresource[] = "SafeBrowsingIsSubresource"; +const char kSafeBrowsingThreatType[] = "SafeBrowsingThreatType"; +} // namespace features BrowseInfo::BrowseInfo() {} @@ -191,7 +211,6 @@ void BrowserFeatureExtractor::ExtractFeatures(const BrowseInfo* info, } ExtractBrowseInfoFeatures(*info, request); - ComputeURLHash(request); pending_extractions_.insert(std::make_pair(request, callback)); MessageLoop::current()->PostTask( FROM_HERE, @@ -444,18 +463,4 @@ bool BrowserFeatureExtractor::GetHistoryService(HistoryService** history) { return false; } -void BrowserFeatureExtractor::ComputeURLHash( - ClientPhishingRequest* request) { - // Put the url into SafeBrowsing host suffix / path prefix format, with - // query parameters stripped. - std::string host, path, query; - safe_browsing_util::CanonicalizeUrl(GURL(request->url()), - &host, &path, &query); - DCHECK(!host.empty()) << request->url(); - DCHECK(!path.empty()) << request->url(); - request->set_suffix_prefix_hash( - crypto::SHA256HashString(host + path).substr( - 0, kSuffixPrefixHashLength)); -} - }; // namespace safe_browsing diff --git a/chrome/browser/safe_browsing/browser_feature_extractor.h b/chrome/browser/safe_browsing/browser_feature_extractor.h index a67438c..1317241 100644 --- a/chrome/browser/safe_browsing/browser_feature_extractor.h +++ b/chrome/browser/safe_browsing/browser_feature_extractor.h @@ -13,7 +13,6 @@ #include <map> #include <set> -#include <string> #include <utility> #include "base/basictypes.h" @@ -45,6 +44,65 @@ struct BrowseInfo { ~BrowseInfo(); }; +namespace features { + +// TODO(noelutz): move renderer/safe_browsing/features.h to common. +//////////////////////////////////////////////////// +// History features. +//////////////////////////////////////////////////// + +// Number of visits to that URL stored in the browser history. +// Should always be an integer larger than 1 because by the time +// we lookup the history the current URL should already be stored there. +extern const char kUrlHistoryVisitCount[]; + +// Number of times the URL was typed in the Omnibox. +extern const char kUrlHistoryTypedCount[]; + +// Number of times the URL was reached by clicking a link. +extern const char kUrlHistoryLinkCount[]; + +// Number of times URL was visited more than 24h ago. +extern const char kUrlHistoryVisitCountMoreThan24hAgo[]; + +// Number of user-visible visits to all URLs on the same host/port as +// the URL for HTTP and HTTPs. +extern const char kHttpHostVisitCount[]; +extern const char kHttpsHostVisitCount[]; + +// Boolean feature which is true if the host was visited for the first +// time more than 24h ago (only considers user-visible visits like above). +extern const char kFirstHttpHostVisitMoreThan24hAgo[]; +extern const char kFirstHttpsHostVisitMoreThan24hAgo[]; + +//////////////////////////////////////////////////// +// Browse features. +//////////////////////////////////////////////////// +// Note that these features may have the following prefixes appended to them +// that tell for which page type the feature pertains. +extern const char kHostPrefix[]; +extern const char kRedirectPrefix[]; + +// Referrer +extern const char kReferrer[]; +// True if the referrer was stripped because it is an SSL referrer. +extern const char kHasSSLReferrer[]; +// Stores the page transition. See: PageTransition. We strip the qualifier. +extern const char kPageTransitionType[]; +// True if this navigation is the first for this tab. +extern const char kIsFirstNavigation[]; + +// Resource was fetched from a known bad IP address. +extern const char kBadIpFetch[]; + +// SafeBrowsing related featues. Fields from the UnsafeResource if there is +// any. +extern const char kSafeBrowsingMaliciousUrl[]; +extern const char kSafeBrowsingOriginalUrl[]; +extern const char kSafeBrowsingIsSubresource[]; +extern const char kSafeBrowsingThreatType[]; +} // namespace features + // All methods of this class must be called on the UI thread (including // the constructor). class BrowserFeatureExtractor { @@ -74,10 +132,6 @@ class BrowserFeatureExtractor { ClientPhishingRequest* request, DoneCallback* callback); - // The size of hash prefix to use for - // ClientPhishingRequest.suffix_prefix_hash. Public for testing. - static const int kSuffixPrefixHashLength; - private: friend class DeleteTask<BrowserFeatureExtractor>; typedef std::pair<ClientPhishingRequest*, DoneCallback*> ExtractionData; @@ -139,10 +193,6 @@ class BrowserFeatureExtractor { // is set it will return true and false otherwise. bool GetHistoryService(HistoryService** history); - // Computes the SHA-256 hash prefix for the URL and adds it to the - // ClientPhishingRequest. - void ComputeURLHash(ClientPhishingRequest* request); - TabContents* tab_; ClientSideDetectionService* service_; CancelableRequestConsumer request_consumer_; diff --git a/chrome/browser/safe_browsing/browser_feature_extractor_unittest.cc b/chrome/browser/safe_browsing/browser_feature_extractor_unittest.cc index 3156f28..f333755 100644 --- a/chrome/browser/safe_browsing/browser_feature_extractor_unittest.cc +++ b/chrome/browser/safe_browsing/browser_feature_extractor_unittest.cc @@ -15,7 +15,6 @@ #include "chrome/browser/history/history.h" #include "chrome/browser/history/history_backend.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/safe_browsing/browser_features.h" #include "chrome/browser/safe_browsing/client_side_detection_service.h" #include "chrome/test/base/testing_profile.h" #include "content/browser/browser_thread.h" @@ -24,7 +23,6 @@ #include "content/browser/tab_contents/test_tab_contents.h" #include "content/common/page_transition_types.h" #include "content/common/view_messages.h" -#include "crypto/sha2.h" #include "googleurl/src/gurl.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -476,52 +474,4 @@ TEST_F(BrowserFeatureExtractorTest, SafeBrowsingFeatures) { EXPECT_DOUBLE_EQ(1.0, features[features::kSafeBrowsingIsSubresource]); EXPECT_DOUBLE_EQ(2.0, features[features::kSafeBrowsingThreatType]); } - -TEST_F(BrowserFeatureExtractorTest, URLHashes) { - ClientPhishingRequest request; - request.set_url("http://host.com/"); - request.set_client_score(0.8f); - - history_service()->AddPage(GURL("http://host.com/"), - history::SOURCE_BROWSED); - contents()->NavigateAndCommit(GURL("http://host.com/")); - - EXPECT_TRUE(ExtractFeatures(&request)); - EXPECT_EQ(crypto::SHA256HashString("host.com/").substr( - 0, BrowserFeatureExtractor::kSuffixPrefixHashLength), - request.suffix_prefix_hash()); - - request.set_url("http://www.host.com/path/"); - history_service()->AddPage(GURL("http://www.host.com/path/"), - history::SOURCE_BROWSED); - contents()->NavigateAndCommit(GURL("http://www.host.com/path/")); - - EXPECT_TRUE(ExtractFeatures(&request)); - EXPECT_EQ(crypto::SHA256HashString("www.host.com/path/").substr( - 0, BrowserFeatureExtractor::kSuffixPrefixHashLength), - request.suffix_prefix_hash()); - - request.set_url("http://user@www.host.com:1111/path/123?args"); - history_service()->AddPage( - GURL("http://user@www.host.com:1111/path/123?args"), - history::SOURCE_BROWSED); - contents()->NavigateAndCommit( - GURL("http://user@www.host.com:1111/path/123?args")); - - EXPECT_TRUE(ExtractFeatures(&request)); - EXPECT_EQ(crypto::SHA256HashString("www.host.com/path/123").substr( - 0, BrowserFeatureExtractor::kSuffixPrefixHashLength), - request.suffix_prefix_hash()); - - // Check that escaping matches the SafeBrowsing specification. - request.set_url("http://www.host.com/A%21//B"); - history_service()->AddPage(GURL("http://www.host.com/A%21//B"), - history::SOURCE_BROWSED); - contents()->NavigateAndCommit(GURL("http://www.host.com/A%21//B")); - - EXPECT_TRUE(ExtractFeatures(&request)); - EXPECT_EQ(crypto::SHA256HashString("www.host.com/A!/B").substr( - 0, BrowserFeatureExtractor::kSuffixPrefixHashLength), - request.suffix_prefix_hash()); -} } // namespace safe_browsing diff --git a/chrome/browser/safe_browsing/browser_features.cc b/chrome/browser/safe_browsing/browser_features.cc deleted file mode 100644 index 0d43679..0000000 --- a/chrome/browser/safe_browsing/browser_features.cc +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/safe_browsing/browser_features.h" - -namespace safe_browsing { -namespace features { -const char kUrlHistoryVisitCount[] = "UrlHistoryVisitCount"; -const char kUrlHistoryTypedCount[] = "UrlHistoryTypedCount"; -const char kUrlHistoryLinkCount[] = "UrlHistoryLinkCount"; -const char kUrlHistoryVisitCountMoreThan24hAgo[] = - "UrlHistoryVisitCountMoreThan24hAgo"; -const char kHttpHostVisitCount[] = "HttpHostVisitCount"; -const char kHttpsHostVisitCount[] = "HttpsHostVisitCount"; -const char kFirstHttpHostVisitMoreThan24hAgo[] = - "FirstHttpHostVisitMoreThan24hAgo"; -const char kFirstHttpsHostVisitMoreThan24hAgo[] = - "FirstHttpsHostVisitMoreThan24hAgo"; - -const char kHostPrefix[] = "Host"; -const char kRedirectPrefix[] = "Redirect"; -const char kReferrer[] = "Referrer"; -const char kHasSSLReferrer[] = "HasSSLReferrer"; -const char kPageTransitionType[] = "PageTransitionType"; -const char kIsFirstNavigation[] = "IsFirstNavigation"; -const char kBadIpFetch[] = "BadIpFetch="; -const char kSafeBrowsingMaliciousUrl[] = "SafeBrowsingMaliciousUrl="; -const char kSafeBrowsingOriginalUrl[] = "SafeBrowsingOriginalUrl="; -const char kSafeBrowsingIsSubresource[] = "SafeBrowsingIsSubresource"; -const char kSafeBrowsingThreatType[] = "SafeBrowsingThreatType"; -} // namespace features -} // namespace safe_browsing diff --git a/chrome/browser/safe_browsing/browser_features.h b/chrome/browser/safe_browsing/browser_features.h deleted file mode 100644 index cae9f5c..0000000 --- a/chrome/browser/safe_browsing/browser_features.h +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// -// Client-side phishing features that are extracted by the browser, after -// receiving a score from the renderer. - -#ifndef CHROME_BROWSER_SAFE_BROWSING_BROWSER_FEATURES_H_ -#define CHROME_BROWSER_SAFE_BROWSING_BROWSER_FEATURES_H_ -#pragma once - -namespace safe_browsing { -namespace features { - -// IMPORTANT: when adding new features, you must update kAllowedFeatures in -// chrome/browser/safe_browsing/client_side_detection_service.cc if the feature -// should be sent in sanitized pingbacks. -// -//////////////////////////////////////////////////// -// History features. -//////////////////////////////////////////////////// - -// Number of visits to that URL stored in the browser history. -// Should always be an integer larger than 1 because by the time -// we lookup the history the current URL should already be stored there. -extern const char kUrlHistoryVisitCount[]; - -// Number of times the URL was typed in the Omnibox. -extern const char kUrlHistoryTypedCount[]; - -// Number of times the URL was reached by clicking a link. -extern const char kUrlHistoryLinkCount[]; - -// Number of times URL was visited more than 24h ago. -extern const char kUrlHistoryVisitCountMoreThan24hAgo[]; - -// Number of user-visible visits to all URLs on the same host/port as -// the URL for HTTP and HTTPs. -extern const char kHttpHostVisitCount[]; -extern const char kHttpsHostVisitCount[]; - -// Boolean feature which is true if the host was visited for the first -// time more than 24h ago (only considers user-visible visits like above). -extern const char kFirstHttpHostVisitMoreThan24hAgo[]; -extern const char kFirstHttpsHostVisitMoreThan24hAgo[]; - -//////////////////////////////////////////////////// -// Browse features. -//////////////////////////////////////////////////// -// Note that these features may have the following prefixes appended to them -// that tell for which page type the feature pertains. -extern const char kHostPrefix[]; -extern const char kRedirectPrefix[]; - -// Referrer -extern const char kReferrer[]; -// True if the referrer was stripped because it is an SSL referrer. -extern const char kHasSSLReferrer[]; -// Stores the page transition. See: PageTransition. We strip the qualifier. -extern const char kPageTransitionType[]; -// True if this navigation is the first for this tab. -extern const char kIsFirstNavigation[]; - -// Resource was fetched from a known bad IP address. -extern const char kBadIpFetch[]; - -// SafeBrowsing related featues. Fields from the UnsafeResource if there is -// any. -extern const char kSafeBrowsingMaliciousUrl[]; -extern const char kSafeBrowsingOriginalUrl[]; -extern const char kSafeBrowsingIsSubresource[]; -extern const char kSafeBrowsingThreatType[]; -} // namespace features -} // namespace safe_browsing - -#endif // CHROME_BROWSER_SAFE_BROWSING_BROWSER_FEATURES_H_ diff --git a/chrome/browser/safe_browsing/client_side_detection_service.cc b/chrome/browser/safe_browsing/client_side_detection_service.cc index 30c5dee..1677353 100644 --- a/chrome/browser/safe_browsing/client_side_detection_service.cc +++ b/chrome/browser/safe_browsing/client_side_detection_service.cc @@ -10,18 +10,13 @@ #include "base/memory/scoped_ptr.h" #include "base/message_loop.h" #include "base/metrics/histogram.h" -#include "base/string_util.h" #include "base/stl_util.h" #include "base/task.h" #include "base/time.h" -#include "chrome/browser/browser_process.h" -#include "chrome/browser/safe_browsing/browser_features.h" -#include "chrome/browser/safe_browsing/safe_browsing_service.h" #include "chrome/common/net/http_return.h" #include "chrome/common/safe_browsing/client_model.pb.h" #include "chrome/common/safe_browsing/csd.pb.h" #include "chrome/common/safe_browsing/safebrowsing_messages.h" -#include "chrome/renderer/safe_browsing/features.h" #include "content/browser/browser_thread.h" #include "content/browser/renderer_host/render_process_host.h" #include "content/common/notification_service.h" @@ -69,10 +64,8 @@ ClientSideDetectionService::CacheState::CacheState(bool phish, base::Time time) ClientSideDetectionService::ClientSideDetectionService( net::URLRequestContextGetter* request_context_getter) : enabled_(false), - sb_service_(g_browser_process->safe_browsing_service()), ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)), request_context_getter_(request_context_getter) { - InitializeAllowedFeatures(); registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CREATED, NotificationService::AllSources()); } @@ -273,40 +266,6 @@ void ClientSideDetectionService::EndFetchModel(ClientModelStatus status) { ScheduleFetchModel(delay_ms); } -void ClientSideDetectionService::SanitizeRequestForPingback( - const ClientPhishingRequest& full_request, - ClientPhishingRequest* sanitized_request) { - DCHECK(full_request.IsInitialized()); - sanitized_request->Clear(); - if (full_request.has_suffix_prefix_hash()) { - sanitized_request->set_suffix_prefix_hash( - full_request.suffix_prefix_hash()); - } - sanitized_request->set_client_score(full_request.client_score()); - if (full_request.has_is_phishing()) { - sanitized_request->set_is_phishing(full_request.is_phishing()); - } - - for (int i = 0; i < full_request.feature_map_size(); ++i) { - const ClientPhishingRequest_Feature& feature = full_request.feature_map(i); - if (allowed_features_.find(feature.name()) != allowed_features_.end()) { - sanitized_request->add_feature_map()->CopyFrom(feature); - } - } - - if (full_request.has_model_version()) { - sanitized_request->set_model_version(full_request.model_version()); - } - - for (int i = 0; i < full_request.non_model_feature_map_size(); ++i) { - const ClientPhishingRequest_Feature& feature = - full_request.non_model_feature_map(i); - if (allowed_features_.find(feature.name()) != allowed_features_.end()) { - sanitized_request->add_non_model_feature_map()->CopyFrom(feature); - } - } -} - void ClientSideDetectionService::StartClientReportPhishingRequest( ClientPhishingRequest* verdict, ClientReportPhishingRequestCallback* callback) { @@ -320,16 +279,8 @@ void ClientSideDetectionService::StartClientReportPhishingRequest( return; } - // Create the version of the request proto that we'll send over the network. - ClientPhishingRequest request_to_send; - if (sb_service_ && sb_service_->CanReportStats()) { - request_to_send.CopyFrom(*request); - } else { - SanitizeRequestForPingback(*request, &request_to_send); - } - std::string request_data; - if (!request_to_send.SerializeToString(&request_data)) { + if (!request->SerializeToString(&request_data)) { UMA_HISTOGRAM_COUNTS("SBClientPhishing.RequestNotSerialized", 1); VLOG(1) << "Unable to serialize the CSD request. Proto file changed?"; if (cb.get()) { @@ -519,44 +470,6 @@ bool ClientSideDetectionService::InitializePrivateNetworks() { return true; } -void ClientSideDetectionService::InitializeAllowedFeatures() { - static const char* const kAllowedFeatures[] = { - // Renderer (model) features. - features::kUrlHostIsIpAddress, - features::kUrlNumOtherHostTokensGTOne, - features::kUrlNumOtherHostTokensGTThree, - features::kPageHasForms, - features::kPageActionOtherDomainFreq, - features::kPageHasTextInputs, - features::kPageHasPswdInputs, - features::kPageHasRadioInputs, - features::kPageHasCheckInputs, - features::kPageExternalLinksFreq, - features::kPageSecureLinksFreq, - features::kPageNumScriptTagsGTOne, - features::kPageNumScriptTagsGTSix, - features::kPageImgOtherDomainFreq, - // Browser (non-model) features. - features::kUrlHistoryVisitCount, - features::kUrlHistoryTypedCount, - features::kUrlHistoryLinkCount, - features::kUrlHistoryVisitCountMoreThan24hAgo, - features::kHttpHostVisitCount, - features::kHttpsHostVisitCount, - features::kFirstHttpHostVisitMoreThan24hAgo, - features::kFirstHttpsHostVisitMoreThan24hAgo, - features::kHasSSLReferrer, - features::kPageTransitionType, - features::kIsFirstNavigation, - features::kSafeBrowsingIsSubresource, - features::kSafeBrowsingThreatType, - }; - - for (size_t i = 0; i < arraysize(kAllowedFeatures); ++i) { - allowed_features_.insert(kAllowedFeatures[i]); - } -} - // static void ClientSideDetectionService::SetBadSubnets(const ClientSideModel& model, BadSubnetMap* bad_subnets) { diff --git a/chrome/browser/safe_browsing/client_side_detection_service.h b/chrome/browser/safe_browsing/client_side_detection_service.h index 002ced1..98a1fe2 100644 --- a/chrome/browser/safe_browsing/client_side_detection_service.h +++ b/chrome/browser/safe_browsing/client_side_detection_service.h @@ -24,7 +24,6 @@ #include "base/basictypes.h" #include "base/callback_old.h" #include "base/gtest_prod_util.h" -#include "base/hash_tables.h" #include "base/memory/linked_ptr.h" #include "base/memory/ref_counted.h" #include "base/memory/scoped_ptr.h" @@ -37,7 +36,6 @@ #include "net/base/net_util.h" class RenderProcessHost; -class SafeBrowsingService; namespace base { class TimeDelta; @@ -168,8 +166,6 @@ class ClientSideDetectionService : public URLFetcher::Delegate, FRIEND_TEST_ALL_PREFIXES(ClientSideDetectionServiceTest, IsBadIpAddress); FRIEND_TEST_ALL_PREFIXES(ClientSideDetectionServiceTest, ModelHasValidHashIds); - FRIEND_TEST_ALL_PREFIXES(ClientSideDetectionServiceTest, - SanitizeRequestForPingback); // CacheState holds all information necessary to respond to a caller without // actually making a HTTP request. @@ -200,14 +196,6 @@ class ClientSideDetectionService : public URLFetcher::Delegate, static const base::TimeDelta kNegativeCacheInterval; static const base::TimeDelta kPositiveCacheInterval; - // Given a ClientSidePhishingRequest populated by the renderer and browser - // feature extractors, sanitizes it so that no data specifically identifying - // the URL or page content is included. This is used when sending a pingback - // if the user is not opted in to UMA. - void SanitizeRequestForPingback( - const ClientPhishingRequest& original_request, - ClientPhishingRequest* sanitized_request); - // Starts sending the request to the client-side detection frontends. // This method takes ownership of both pointers. void StartClientReportPhishingRequest( @@ -242,10 +230,6 @@ class ClientSideDetectionService : public URLFetcher::Delegate, // that we consider non-public IP addresses. Returns true on success. bool InitializePrivateNetworks(); - // Initializes the |allowed_features_| hash_set with the features that - // can be sent in sanitized pingbacks. - void InitializeAllowedFeatures(); - // Send the model to the given renderer. void SendModelToProcess(RenderProcessHost* process); @@ -272,9 +256,6 @@ class ClientSideDetectionService : public URLFetcher::Delegate, scoped_ptr<base::TimeDelta> model_max_age_; scoped_ptr<URLFetcher> model_fetcher_; - // This pointer may be NULL if SafeBrowsing is disabled. - scoped_refptr<SafeBrowsingService> sb_service_; - // Map of client report phishing request to the corresponding callback that // has to be invoked when the request is done. struct ClientReportInfo; @@ -303,9 +284,6 @@ class ClientSideDetectionService : public URLFetcher::Delegate, // The network blocks that we consider private IP address ranges. std::vector<AddressRange> private_networks_; - // Features which are allowed to be sent in sanitized pingbacks. - base::hash_set<std::string> allowed_features_; - // Map of bad subnets which are copied from the client model and put into // this map to speed up lookups. BadSubnetMap bad_subnets_; diff --git a/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc b/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc index dcf2076..760b2a8 100644 --- a/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc +++ b/chrome/browser/safe_browsing/client_side_detection_service_unittest.cc @@ -10,14 +10,11 @@ #include "base/logging.h" #include "base/memory/scoped_ptr.h" #include "base/message_loop.h" -#include "base/stringprintf.h" #include "base/task.h" #include "base/time.h" -#include "chrome/browser/safe_browsing/browser_features.h" #include "chrome/browser/safe_browsing/client_side_detection_service.h" #include "chrome/common/safe_browsing/client_model.pb.h" #include "chrome/common/safe_browsing/csd.pb.h" -#include "chrome/renderer/safe_browsing/features.h" #include "chrome/test/base/testing_browser_process_test.h" #include "content/browser/browser_thread.h" #include "content/common/url_fetcher.h" @@ -166,21 +163,6 @@ class ClientSideDetectionServiceTest : public TestingBrowserProcessTest { EXPECT_TRUE(is_phishing); } - void AddFeature(const std::string& name, double value, - ClientPhishingRequest* request) { - ClientPhishingRequest_Feature* feature = request->add_feature_map(); - feature->set_name(name); - feature->set_value(value); - } - - void AddNonModelFeature(const std::string& name, double value, - ClientPhishingRequest* request) { - ClientPhishingRequest_Feature* feature = - request->add_non_model_feature_map(); - feature->set_name(name); - feature->set_value(value); - } - protected: scoped_ptr<ClientSideDetectionService> csd_service_; scoped_ptr<FakeURLFetcherFactory> factory_; @@ -664,91 +646,4 @@ TEST_F(ClientSideDetectionServiceTest, SetEnabled) { Mock::VerifyAndClearExpectations(service); } -TEST_F(ClientSideDetectionServiceTest, SanitizeRequestForPingback) { - ClientPhishingRequest request; - request.set_url("http://www.us.host.com/blah"); - request.set_suffix_prefix_hash("hash"); - request.set_client_score(0.8f); - request.set_is_phishing(true); - AddFeature(std::string(features::kUrlTldToken) + "com", 1.0, &request); - AddFeature(std::string(features::kUrlDomainToken) + "host", 1.0, &request); - AddFeature(std::string(features::kUrlOtherHostToken) + "us", 1.0, &request); - AddFeature(std::string(features::kUrlOtherHostToken) + "www", 1.0, &request); - AddFeature(features::kUrlNumOtherHostTokensGTOne, 1.0, &request); - AddFeature(std::string(features::kUrlPathToken) + "blah", 1.0, &request); - AddFeature(features::kPageHasForms, 1.0, &request); - AddFeature(std::string(features::kPageTerm) + "term", 1.0, &request); - AddFeature(features::kPageImgOtherDomainFreq, 0.5, &request); - request.set_model_version(3); - AddNonModelFeature(features::kUrlHistoryVisitCount, 5.0, &request); - AddNonModelFeature(StringPrintf("%s=http://referrer.com/", - features::kReferrer), - 1.0, &request); - AddNonModelFeature(StringPrintf("%s%s=http://redirreferrer.com/", - features::kRedirectPrefix, - features::kReferrer), - 1.0, &request); - AddNonModelFeature(StringPrintf("%s%s=http://hostreferrer.com/", - features::kHostPrefix, features::kReferrer), - 1.0, &request); - AddNonModelFeature(StringPrintf("%s%s%s=http://hostredirreferrer.com/", - features::kHostPrefix, - features::kRedirectPrefix, - features::kReferrer), - 1.0, &request); - AddNonModelFeature(std::string(features::kBadIpFetch) + "1.2.3.4", - 1.0, &request); - AddNonModelFeature(std::string(features::kSafeBrowsingMaliciousUrl) + - "http://malicious.com/", 1.0, &request); - AddNonModelFeature(std::string(features::kSafeBrowsingOriginalUrl) + - "http://original.com/", 1.0, &request); - - csd_service_.reset(ClientSideDetectionService::Create(NULL)); - - ClientPhishingRequest sanitized_request; - csd_service_->SanitizeRequestForPingback(request, &sanitized_request); - - // For easier debugging, we'll check the output protobuf fields individually. - ClientPhishingRequest expected; - expected.set_suffix_prefix_hash(request.suffix_prefix_hash()); - expected.set_client_score(request.client_score()); - expected.set_is_phishing(request.is_phishing()); - AddFeature(features::kUrlNumOtherHostTokensGTOne, 1.0, &expected); - AddFeature(features::kPageHasForms, 1.0, &expected); - AddFeature(features::kPageImgOtherDomainFreq, 0.5, &expected); - expected.set_model_version(3); - AddNonModelFeature(features::kUrlHistoryVisitCount, 5.0, &expected); - - EXPECT_FALSE(sanitized_request.has_url()); - EXPECT_EQ(expected.suffix_prefix_hash(), - sanitized_request.suffix_prefix_hash()); - EXPECT_FLOAT_EQ(expected.client_score(), sanitized_request.client_score()); - EXPECT_EQ(expected.is_phishing(), sanitized_request.is_phishing()); - - ASSERT_EQ(expected.feature_map_size(), sanitized_request.feature_map_size()); - for (int i = 0; i < expected.feature_map_size(); ++i) { - EXPECT_EQ(expected.feature_map(i).name(), - sanitized_request.feature_map(i).name()) << "Feature " << i; - EXPECT_DOUBLE_EQ(expected.feature_map(i).value(), - sanitized_request.feature_map(i).value()) - << "Feature " << i; - } - EXPECT_EQ(expected.model_version(), sanitized_request.model_version()); - ASSERT_EQ(expected.non_model_feature_map_size(), - sanitized_request.non_model_feature_map_size()); - for (int i = 0; i < expected.non_model_feature_map_size(); ++i) { - EXPECT_EQ(expected.non_model_feature_map(i).name(), - sanitized_request.non_model_feature_map(i).name()) - << "Non-model feature " << i; - EXPECT_DOUBLE_EQ(expected.non_model_feature_map(i).value(), - sanitized_request.non_model_feature_map(i).value()) - << "Non-model feature " << i; - } - - // Also check the serialized forms in case there's a field that we forget - // to add above. - EXPECT_EQ(expected.SerializeAsString(), - sanitized_request.SerializeAsString()); -} - } // namespace safe_browsing diff --git a/chrome/browser/safe_browsing/safe_browsing_service.cc b/chrome/browser/safe_browsing/safe_browsing_service.cc index 256b0e1..c8f1851 100644 --- a/chrome/browser/safe_browsing/safe_browsing_service.cc +++ b/chrome/browser/safe_browsing/safe_browsing_service.cc @@ -169,9 +169,7 @@ SafeBrowsingService::SafeBrowsingService() #if !defined(OS_CHROMEOS) if (!CommandLine::ForCurrentProcess()->HasSwitch( switches::kDisableClientSidePhishingDetection) && - (CommandLine::ForCurrentProcess()->HasSwitch( - switches::kEnableSanitizedClientSidePhishingDetection) || - CanReportStats())) { + CanReportStats()) { csd_service_.reset( safe_browsing::ClientSideDetectionService::Create( g_browser_process->system_request_context())); @@ -901,10 +899,7 @@ void SafeBrowsingService::Start() { #else enable_csd_whitelist_ = (!cmdline->HasSwitch(switches::kDisableClientSidePhishingDetection) && - (cmdline->HasSwitch( - switches::kEnableSanitizedClientSidePhishingDetection) || - (local_state && - local_state->GetBoolean(prefs::kMetricsReportingEnabled)))); + local_state && local_state->GetBoolean(prefs::kMetricsReportingEnabled)); #endif BrowserThread::PostTask( diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index ea93ea5..5e8829d 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -1892,8 +1892,6 @@ 'browser/safe_browsing/bloom_filter.h', 'browser/safe_browsing/browser_feature_extractor.cc', 'browser/safe_browsing/browser_feature_extractor.h', - 'browser/safe_browsing/browser_features.cc', - 'browser/safe_browsing/browser_features.h', 'browser/safe_browsing/chunk_range.cc', 'browser/safe_browsing/chunk_range.h', 'browser/safe_browsing/client_side_detection_host.cc', diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index 73187ef..e03bf0f 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc @@ -497,12 +497,6 @@ const char kEnablePanels[] = "enable-panels"; // Enable speculative TCP/IP preconnection. const char kEnablePreconnect[] = "enable-preconnect"; -// Enables the sanitized version of client-side phishing detection, for use by -// non-UMA users. Any features containing portions of the URL or page content -// are not sent as part of the pingback in this mode. -const char kEnableSanitizedClientSidePhishingDetection[] = - "enable-sanitized-client-side-phishing-detection"; - // Enable the IsSearchProviderInstalled and InstallSearchProvider with an extra // parameter to indicate if the provider should be the default. const char kEnableSearchProviderApiV2[] = "enable-search-provider-api-v2"; diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h index 7287dd9..4e7785e 100644 --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h @@ -144,7 +144,6 @@ extern const char kEnableOriginBoundCerts[]; extern const char kEnablePanels[]; extern const char kEnablePreconnect[]; extern const char kEnableResourceContentSettings[]; -extern const char kEnableSanitizedClientSidePhishingDetection[]; extern const char kEnableSearchProviderApiV2[]; extern const char kEnableShortcutsProvider[]; extern const char kEnableSmoothScrolling[]; diff --git a/chrome/common/safe_browsing/csd.proto b/chrome/common/safe_browsing/csd.proto index b700326..983b79c 100644 --- a/chrome/common/safe_browsing/csd.proto +++ b/chrome/common/safe_browsing/csd.proto @@ -17,13 +17,8 @@ package safe_browsing; message ClientPhishingRequest { // URL that the client visited. The CGI parameters are stripped by the - // client. This field is ONLY set for UMA-enabled users. - optional string url = 1; - - // A 5-byte SHA-256 hash prefix of the URL, in SafeBrowsing host sufffix/path - // prefix form with query parameters stripped (i.e. "www.example.com/1/2/"). - // Unlike "url", this is sent for all users. - optional bytes suffix_prefix_hash = 10; + // client. + required string url = 1; // Score that was computed on the client. Value is between 0.0 and 1.0. // The larger the value the more likely the url is phishing. diff --git a/chrome/renderer/safe_browsing/features.h b/chrome/renderer/safe_browsing/features.h index a8067f7..82370c1 100644 --- a/chrome/renderer/safe_browsing/features.h +++ b/chrome/renderer/safe_browsing/features.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // @@ -71,10 +71,6 @@ class FeatureMap { namespace features { // Constants for the various feature names that we use. -// -// IMPORTANT: when adding new features, you must update kAllowedFeatures in -// chrome/browser/safe_browsing/client_side_detection_service.cc if the feature -// should be sent in sanitized pingbacks. //////////////////////////////////////////////////// // URL host features |