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

Side by Side Diff: chrome/browser/safe_browsing/download_protection_service.cc

Issue 1230483005: [SafeBrowsing] Send pingbacks for additional file types. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@more-dangerous-files
Patch Set: Cleanup some file extension checks. Created 5 years, 5 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 "chrome/browser/safe_browsing/download_protection_service.h" 5 #include "chrome/browser/safe_browsing/download_protection_service.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
55 namespace { 55 namespace {
56 static const int64 kDownloadRequestTimeoutMs = 7000; 56 static const int64 kDownloadRequestTimeoutMs = 7000;
57 } // namespace 57 } // namespace
58 58
59 namespace safe_browsing { 59 namespace safe_browsing {
60 60
61 const char DownloadProtectionService::kDownloadRequestUrl[] = 61 const char DownloadProtectionService::kDownloadRequestUrl[] =
62 "https://sb-ssl.google.com/safebrowsing/clientreport/download"; 62 "https://sb-ssl.google.com/safebrowsing/clientreport/download";
63 63
64 namespace { 64 namespace {
65 // List of extensions for which we track some UMA stats. 65 // List of extensions for which we track some UMA stats. The position of the
66 enum MaliciousExtensionType { 66 // extension in kDangerousFileTypes is considered to be the UMA enumeration
67 EXTENSION_EXE, 67 // value. Naturally, new values should only be added at the end.
68 EXTENSION_MSI, 68 const base::FilePath::CharType* const kDangerousFileTypes[] = {
69 EXTENSION_CAB, 69 FILE_PATH_LITERAL(".exe"),
70 EXTENSION_SYS, 70 FILE_PATH_LITERAL(".msi"),
71 EXTENSION_SCR, 71 FILE_PATH_LITERAL(".cab"),
72 EXTENSION_DRV, 72 FILE_PATH_LITERAL(".sys"),
73 EXTENSION_BAT, 73 FILE_PATH_LITERAL(".scr"),
74 EXTENSION_ZIP, 74 FILE_PATH_LITERAL(".drv"),
75 EXTENSION_RAR, 75 FILE_PATH_LITERAL(".bat"),
76 EXTENSION_DLL, 76 FILE_PATH_LITERAL(".zip"),
77 EXTENSION_PIF, 77 FILE_PATH_LITERAL(".rar"),
78 EXTENSION_COM, 78 FILE_PATH_LITERAL(".dll"),
79 EXTENSION_JAR, 79 FILE_PATH_LITERAL(".pif"),
80 EXTENSION_CLASS, 80 FILE_PATH_LITERAL(".com"),
81 EXTENSION_PDF, 81 FILE_PATH_LITERAL(".jar"),
82 EXTENSION_VB, 82 FILE_PATH_LITERAL(".class"),
83 EXTENSION_REG, 83 FILE_PATH_LITERAL(".pdf"),
84 EXTENSION_GRP, 84 FILE_PATH_LITERAL(".vb"),
85 EXTENSION_OTHER, // Groups all other extensions into one bucket. 85 FILE_PATH_LITERAL(".reg"),
86 EXTENSION_CRX, 86 FILE_PATH_LITERAL(".grp"),
87 EXTENSION_APK, 87 nullptr, // The "Other" bucket. This is in the middle of the array due to
88 EXTENSION_DMG, 88 // historical reasons.
89 EXTENSION_PKG, 89 FILE_PATH_LITERAL(".crx"),
90 EXTENSION_TORRENT, 90 FILE_PATH_LITERAL(".apk"),
91 EXTENSION_WEBSITE, 91 FILE_PATH_LITERAL(".dmg"),
92 EXTENSION_URL, 92 FILE_PATH_LITERAL(".pkg"),
93 EXTENSION_MAX, 93 FILE_PATH_LITERAL(".torrent"),
94 FILE_PATH_LITERAL(".website"),
95 FILE_PATH_LITERAL(".url"),
96 FILE_PATH_LITERAL(".vbe"),
97 FILE_PATH_LITERAL(".vbs"),
98 FILE_PATH_LITERAL(".js"),
99 FILE_PATH_LITERAL(".jse"),
100 FILE_PATH_LITERAL(".mht"),
101 FILE_PATH_LITERAL(".mhtml"),
moheeb1 2015/07/08 20:25:29 Would be great to expand this list to cover all da
94 }; 102 };
95 103
96 MaliciousExtensionType GetExtensionType(const base::FilePath& f) { 104 const int EXTENSION_OTHER = 18;
Nathan Parker 2015/07/08 20:11:08 Nit: Add comment or make the name indicate that th
97 if (f.MatchesExtension(FILE_PATH_LITERAL(".exe"))) return EXTENSION_EXE;
98 if (f.MatchesExtension(FILE_PATH_LITERAL(".msi"))) return EXTENSION_MSI;
99 if (f.MatchesExtension(FILE_PATH_LITERAL(".cab"))) return EXTENSION_CAB;
100 if (f.MatchesExtension(FILE_PATH_LITERAL(".sys"))) return EXTENSION_SYS;
101 if (f.MatchesExtension(FILE_PATH_LITERAL(".scr"))) return EXTENSION_SCR;
102 if (f.MatchesExtension(FILE_PATH_LITERAL(".drv"))) return EXTENSION_DRV;
103 if (f.MatchesExtension(FILE_PATH_LITERAL(".bat"))) return EXTENSION_BAT;
104 if (f.MatchesExtension(FILE_PATH_LITERAL(".zip"))) return EXTENSION_ZIP;
105 if (f.MatchesExtension(FILE_PATH_LITERAL(".rar"))) return EXTENSION_RAR;
106 if (f.MatchesExtension(FILE_PATH_LITERAL(".dll"))) return EXTENSION_DLL;
107 if (f.MatchesExtension(FILE_PATH_LITERAL(".pif"))) return EXTENSION_PIF;
108 if (f.MatchesExtension(FILE_PATH_LITERAL(".com"))) return EXTENSION_COM;
109 if (f.MatchesExtension(FILE_PATH_LITERAL(".jar"))) return EXTENSION_JAR;
110 if (f.MatchesExtension(FILE_PATH_LITERAL(".class"))) return EXTENSION_CLASS;
111 if (f.MatchesExtension(FILE_PATH_LITERAL(".pdf"))) return EXTENSION_PDF;
112 if (f.MatchesExtension(FILE_PATH_LITERAL(".vb"))) return EXTENSION_VB;
113 if (f.MatchesExtension(FILE_PATH_LITERAL(".reg"))) return EXTENSION_REG;
114 if (f.MatchesExtension(FILE_PATH_LITERAL(".grp"))) return EXTENSION_GRP;
115 if (f.MatchesExtension(FILE_PATH_LITERAL(".crx"))) return EXTENSION_CRX;
116 if (f.MatchesExtension(FILE_PATH_LITERAL(".apk"))) return EXTENSION_APK;
117 if (f.MatchesExtension(FILE_PATH_LITERAL(".dmg"))) return EXTENSION_DMG;
118 if (f.MatchesExtension(FILE_PATH_LITERAL(".pkg"))) return EXTENSION_PKG;
119 if (f.MatchesExtension(FILE_PATH_LITERAL(".torrent")))
120 return EXTENSION_TORRENT;
121 if (f.MatchesExtension(FILE_PATH_LITERAL(".website")))
122 return EXTENSION_WEBSITE;
123 if (f.MatchesExtension(FILE_PATH_LITERAL(".url"))) return EXTENSION_URL;
124 return EXTENSION_OTHER;
125 }
126 105
127 void RecordFileExtensionType(const base::FilePath& file) { 106 void RecordFileExtensionType(const base::FilePath& file) {
107 DCHECK_EQ(static_cast<base::FilePath::CharType*>(nullptr),
108 kDangerousFileTypes[EXTENSION_OTHER]);
109
110 int extension_type = EXTENSION_OTHER;
111 for (const auto& extension : kDangerousFileTypes) {
112 if (extension && file.MatchesExtension(extension)) {
113 extension_type = &extension - kDangerousFileTypes;
114 break;
115 }
116 }
117
128 UMA_HISTOGRAM_ENUMERATION("SBClientDownload.DownloadExtensions", 118 UMA_HISTOGRAM_ENUMERATION("SBClientDownload.DownloadExtensions",
129 GetExtensionType(file), 119 extension_type, arraysize(kDangerousFileTypes));
130 EXTENSION_MAX);
131 } 120 }
132 121
133 // Enumerate for histogramming purposes. 122 // Enumerate for histogramming purposes.
134 // DO NOT CHANGE THE ORDERING OF THESE VALUES (different histogram data will 123 // DO NOT CHANGE THE ORDERING OF THESE VALUES (different histogram data will
135 // be mixed together based on their values). 124 // be mixed together based on their values).
136 enum SBStatsType { 125 enum SBStatsType {
137 DOWNLOAD_URL_CHECKS_TOTAL, 126 DOWNLOAD_URL_CHECKS_TOTAL,
138 DOWNLOAD_URL_CHECKS_CANCELED, 127 DOWNLOAD_URL_CHECKS_CANCELED,
139 DOWNLOAD_URL_CHECKS_MALWARE, 128 DOWNLOAD_URL_CHECKS_MALWARE,
140 129
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 609
621 void CheckWhitelists() { 610 void CheckWhitelists() {
622 DCHECK_CURRENTLY_ON(BrowserThread::IO); 611 DCHECK_CURRENTLY_ON(BrowserThread::IO);
623 612
624 if (!database_manager_.get()) { 613 if (!database_manager_.get()) {
625 PostFinishTask(UNKNOWN, REASON_SB_DISABLED); 614 PostFinishTask(UNKNOWN, REASON_SB_DISABLED);
626 return; 615 return;
627 } 616 }
628 617
629 const GURL& url = url_chain_.back(); 618 const GURL& url = url_chain_.back();
619 // TODO(asanka): This may acquire a lock on the SB DB on the IO thread.
630 if (url.is_valid() && database_manager_->MatchDownloadWhitelistUrl(url)) { 620 if (url.is_valid() && database_manager_->MatchDownloadWhitelistUrl(url)) {
631 DVLOG(2) << url << " is on the download whitelist."; 621 DVLOG(2) << url << " is on the download whitelist.";
632 RecordCountOfSignedOrWhitelistedDownload(); 622 RecordCountOfSignedOrWhitelistedDownload();
633 // TODO(grt): Continue processing without uploading so that 623 // TODO(grt): Continue processing without uploading so that
634 // ClientDownloadRequest callbacks can be run even for this type of safe 624 // ClientDownloadRequest callbacks can be run even for this type of safe
635 // download. 625 // download.
636 PostFinishTask(SAFE, REASON_WHITELISTED_URL); 626 PostFinishTask(SAFE, REASON_WHITELISTED_URL);
637 return; 627 return;
638 } 628 }
639 629
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
1120 GURL DownloadProtectionService::GetDownloadRequestUrl() { 1110 GURL DownloadProtectionService::GetDownloadRequestUrl() {
1121 GURL url(kDownloadRequestUrl); 1111 GURL url(kDownloadRequestUrl);
1122 std::string api_key = google_apis::GetAPIKey(); 1112 std::string api_key = google_apis::GetAPIKey();
1123 if (!api_key.empty()) 1113 if (!api_key.empty())
1124 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true)); 1114 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true));
1125 1115
1126 return url; 1116 return url;
1127 } 1117 }
1128 1118
1129 } // namespace safe_browsing 1119 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698