OLD | NEW |
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/client_side_detection_service.h" | 5 #include "chrome/browser/safe_browsing/client_side_detection_service.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 for (std::vector<AddressRange>::const_iterator it = | 199 for (std::vector<AddressRange>::const_iterator it = |
200 private_networks_.begin(); | 200 private_networks_.begin(); |
201 it != private_networks_.end(); ++it) { | 201 it != private_networks_.end(); ++it) { |
202 if (net::IPNumberMatchesPrefix(ip_number, it->first, it->second)) { | 202 if (net::IPNumberMatchesPrefix(ip_number, it->first, it->second)) { |
203 return true; | 203 return true; |
204 } | 204 } |
205 } | 205 } |
206 return false; | 206 return false; |
207 } | 207 } |
208 | 208 |
209 bool ClientSideDetectionService::IsBadIpAddress( | |
210 const std::string& ip_address) const { | |
211 net::IPAddressNumber ip_number; | |
212 if (!net::ParseIPLiteralToNumber(ip_address, &ip_number)) { | |
213 VLOG(2) << "Unable to parse IP address: '" << ip_address << "'"; | |
214 return false; | |
215 } | |
216 if (ip_number.size() == net::kIPv4AddressSize) { | |
217 ip_number = net::ConvertIPv4NumberToIPv6Number(ip_number); | |
218 } | |
219 if (ip_number.size() != net::kIPv6AddressSize) { | |
220 VLOG(2) << "Unable to convert IPv4 address to IPv6: '" << ip_address << "'"; | |
221 return false; // better safe than sorry. | |
222 } | |
223 for (BadSubnetMap::const_iterator it = bad_subnets_.begin(); | |
224 it != bad_subnets_.end(); ++it) { | |
225 const std::string& mask = it->first; | |
226 DCHECK_EQ(mask.size(), ip_number.size()); | |
227 std::string subnet(net::kIPv6AddressSize, '.'); | |
228 for (size_t i = 0; i < net::kIPv6AddressSize; ++i) { | |
229 subnet[i] = ip_number[i] & mask[i]; | |
230 } | |
231 if (it->second.count(crypto::SHA256HashString(subnet)) > 0) { | |
232 return true; | |
233 } | |
234 } | |
235 return false; | |
236 } | |
237 | |
238 void ClientSideDetectionService::OnURLFetchComplete( | 209 void ClientSideDetectionService::OnURLFetchComplete( |
239 const net::URLFetcher* source) { | 210 const net::URLFetcher* source) { |
240 std::string data; | 211 std::string data; |
241 source->GetResponseAsString(&data); | 212 source->GetResponseAsString(&data); |
242 if (source == model_fetcher_.get()) { | 213 if (source == model_fetcher_.get()) { |
243 HandleModelResponse( | 214 HandleModelResponse( |
244 source, source->GetURL(), source->GetStatus(), | 215 source, source->GetURL(), source->GetStatus(), |
245 source->GetResponseCode(), source->GetCookies(), data); | 216 source->GetResponseCode(), source->GetCookies(), data); |
246 } else if (client_phishing_reports_.find(source) != | 217 } else if (client_phishing_reports_.find(source) != |
247 client_phishing_reports_.end()) { | 218 client_phishing_reports_.end()) { |
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
709 GURL ClientSideDetectionService::GetClientReportUrl( | 680 GURL ClientSideDetectionService::GetClientReportUrl( |
710 const std::string& report_url) { | 681 const std::string& report_url) { |
711 GURL url(report_url); | 682 GURL url(report_url); |
712 std::string api_key = google_apis::GetAPIKey(); | 683 std::string api_key = google_apis::GetAPIKey(); |
713 if (!api_key.empty()) | 684 if (!api_key.empty()) |
714 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true)); | 685 url = url.Resolve("?key=" + net::EscapeQueryParamValue(api_key, true)); |
715 | 686 |
716 return url; | 687 return url; |
717 } | 688 } |
718 } // namespace safe_browsing | 689 } // namespace safe_browsing |
OLD | NEW |