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

Side by Side Diff: components/data_reduction_proxy/browser/data_reduction_proxy_tamper_detect.h

Issue 338483002: Chrome Participated Tamper Detect (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_TAMPER_DETE CT_H_
6 #define COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_TAMPER_DETE CT_H_
7
8 #include "components/data_reduction_proxy/common/data_reduction_proxy_headers.h"
9
10 #include "net/http/http_response_headers.h"
bengr 2014/07/11 18:22:48 #include <string> #include <vector>
xingx 2014/07/15 04:51:36 Done.
11
bengr 2014/07/11 18:22:47 namespace net { class HttpResponseHeaders; }
xingx 2014/07/15 04:51:36 Done.
12 namespace data_reduction_proxy {
13
14 // The class for detecting tampering.
bengr 2014/07/11 18:22:48 Explain what that means. E.g., "This class that de
xingx 2014/07/15 04:51:35 Done.
15 // For each type of fingerprint, we have a pair of functions:
16 // * checking function: returns true if such fingerprint got tampered;
17 // (function name Is...Tampered)
18 // * reporting function: reporting tampering to corresponding UMA.
19 // (function name Report...TamperedUMA)
20 class DataReductionProxyTamperDetect {
21 public:
22 DataReductionProxyTamperDetect(
bengr 2014/07/11 18:22:48 suggest: DataReductionProxyTamperDetection
bengr 2014/07/11 18:22:48 Add a comment. What are all these parameters? How
xingx 2014/07/15 04:51:35 Done.
xingx 2014/07/15 04:51:36 Done.
23 const net::HttpResponseHeaders* response_headers,
24 bool is_secure_scheme,
25 unsigned mcc_mnc,
bengr 2014/07/11 18:22:49 rename: carrier_id.
xingx 2014/07/15 04:51:36 Done.
26 std::vector<std::string>* chrome_proxy_header_values);
27
28 virtual ~DataReductionProxyTamperDetect();
29
30 // The main function for detecting tampering, which checks whether there is
31 // tamper detect request (i.e., contains fingerprints added by data reduction
bengr 2014/07/11 18:22:48 Be clearer, e.g.: "Checks if the response contain
xingx 2014/07/15 04:51:35 Done.
32 // proxy) in the response from data reduction proxy. if so, it checks whether
33 // there are tampers and report the results to UMA. HTTP and HTTPS traffic
34 // would be reported independently, specified by |is_secure_scheme|.
35 static void CheckResponseFingerprint(const net::HttpResponseHeaders* header,
bengr 2014/07/11 18:22:48 Move this static method above the constructor.
xingx 2014/07/15 04:51:36 Done.
36 bool is_secure_scheme);
37
38 private:
39 friend class DataReductionProxyTamperDetectTest;
40 FRIEND_TEST_ALL_PREFIXES(DataReductionProxyTamperDetectTest,
41 TestFingerprintCommon);
42 FRIEND_TEST_ALL_PREFIXES(DataReductionProxyTamperDetectTest,
43 ChromeProxy);
44 FRIEND_TEST_ALL_PREFIXES(DataReductionProxyTamperDetectTest,
45 Via);
46 FRIEND_TEST_ALL_PREFIXES(DataReductionProxyTamperDetectTest,
47 OtherHeaders);
48 FRIEND_TEST_ALL_PREFIXES(DataReductionProxyTamperDetectTest,
49 ContentLength);
50 FRIEND_TEST_ALL_PREFIXES(DataReductionProxyTamperDetectTest,
51 Parsing);
52 FRIEND_TEST_ALL_PREFIXES(DataReductionProxyTamperDetectTest,
53 Completed);
54
55 // Enum for fingerprint type.
bengr 2014/07/11 18:22:48 Put each value on its own line and add a comment f
xingx 2014/07/15 04:51:36 Done.
56 enum FingerprintCode { CHROMEPROXY,
57 VIA,
58 OTHERHEADERS,
59 CONTENTLENGTH,
60 NONEXIST };
61
62 // Returns true if the Chrome-Proxy header has been tampered.
63 bool IsChromeProxyHeaderTampered(const std::string& fingerprint) const;
bengr 2014/07/11 18:22:48 Where's the reporting function fo this one?
xingx 2014/07/15 04:51:35 Done.
64
65 // Returns true if the Via header has been tampered.
66 bool IsViaHeaderTampered(const std::string& fingerprint) const;
67 // Reports UMA for tampering of the Via header.
68 void ReportViaHeaderTamperedUMA() const;
69
70 // Returns true if a list of data reductin proxy defined headers have been
71 // tampered.
72 bool AreOtherHeadersTampered(const std::string& fingerprint) const;
73 // Reports UMA for tampering of values of the list of headers.
74 void ReportOtherHeadersTamperedUMA() const;
75
76 // Returns true if Content-Length has been tampered.
77 bool IsContentLengthHeaderTampered(const std::string& fingerprint) const;
78 // Reports UMA for tampering of Content-Length.
79 void ReportContentLengthHeaderTamperedUMA() const;
80
81 // Returns fingerprint code (enum) for the given fingerprint tag.
82 FingerprintCode GetFingerprintCode(const std::string& fingerprint_tag);
83
84 // Check whether values of a Chrome-Proxy header contains fingerprints added
bengr 2014/07/11 18:22:48 contain
xingx 2014/07/15 04:51:35 Done.
85 // by data reduction proxy. If it does, return true, and save Chrome-Proxy
bengr 2014/07/11 18:22:48 the data reduction If they do and save the
xingx 2014/07/15 04:51:36 Done.
86 // header's fingerprint to |chrome_proxy_fingerprint|; also save other
87 // fingerprints to |other_fingerprints|. Return false if there is no
88 // fingerprint found. Chrome-Proxy header's fingerprint will be removed from
89 // |values| to get |clean_chrome_proxy_header_values| for later use.
90 static bool GetTamperDetectFingerprints(std::vector<std::string>* values,
bengr 2014/07/11 18:22:48 Move this first param to a new line or align the s
xingx 2014/07/15 04:51:36 Done.
91 std::string* chrome_proxy_fingerprint,
92 std::string* other_fingerprints);
93
94 // Utility function. Return string of sorted values of |values|.
bengr 2014/07/11 18:22:48 Returns And no need to call it a utility function
xingx 2014/07/15 04:51:36 Done.
95 static std::string ValuesToSortedString(std::vector<std::string> &values);
bengr 2014/07/11 18:22:48 Do not use non-const references. And the & should
xingx 2014/07/15 04:51:36 Done.
96
97 // Utility function. Return MD5 hash value for a given string |input|.
bengr 2014/07/11 18:22:48 Remove "Utility function" Returns the
xingx 2014/07/15 04:51:35 Done.
98 // We need raw MD5 hash value so it's different to base::MD5String which is
bengr 2014/07/11 18:22:48 Remove "We". I.e., don't personify code or comment
xingx 2014/07/15 04:51:36 Done.
99 // base16 encoded. It's similar to base::MD5Sum but with digest converted to
100 // string.
101 static std::string GetMD5(const std::string& input);
102
103 // Utility function. Return all the values of a header field |header_name|
104 // of the response header |headers|, as a vector.
105 static std::vector<std::string> GetHeaderValues(
106 const net::HttpResponseHeaders* headers, const std::string& header_name);
107
108 const net::HttpResponseHeaders* response_headers_;
109
110 // If true, the connection to the data reduction proxy is over HTTPS.
111 const bool is_secure_scheme_;
112
113 // Carrier ID.
114 const unsigned mcc_mnc_;
bengr 2014/07/11 18:22:48 Don't use abbreviations in variable names. Can you
xingx 2014/07/15 04:51:36 Done.
115
116 // Values for Chrome-Proxy header, with its fingerprint value removed.
117 // Save it as temporary result so we don't need to parse Chrome-Proxy header
bengr 2014/07/11 18:22:49 as a parse the
xingx 2014/07/15 04:51:35 Done.
118 // twice.
119 std::vector<std::string>* clean_chrome_proxy_header_values_;
120
121 // Map a fingerprint tag (string) to a fingerprint code (enum).
122 std::map<std::string, FingerprintCode> fingperprint_tag_code_map_;
123 };
124
125 } // namespace data_reduction_proxy
126 #endif // COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_TAMPER_D ETECT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698