Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 <map> | |
| 9 | |
| 10 #include "components/data_reduction_proxy/common/data_reduction_proxy_headers.h" | |
| 11 | |
| 12 #include "net/http/http_response_headers.h" | |
| 13 | |
| 14 //namespace net { | |
|
bengr
2014/07/07 17:01:33
Remove dead code. Though I think you need this for
xingx
2014/07/08 00:22:25
Done.
| |
| 15 //class HttpResponseHeaders; | |
| 16 //} | |
| 17 | |
| 18 namespace data_reduction_proxy { | |
| 19 | |
| 20 // Two fingerprints will be added to Chrome-Proxy header. | |
|
bengr
2014/07/07 17:01:34
Fill the comment out to 80 characters on each line
xingx
2014/07/08 00:22:26
Done.
| |
| 21 // One starts with |kTamperDetectFingerprintChromeProxy|, which is the | |
| 22 // fingerprint for Chrome-Proxy header. | |
|
bengr
2014/07/07 17:01:33
for the
xingx
2014/07/08 00:22:26
Done.
| |
| 23 // The other one starts with |kTamperDetectFingerprint|, which includes | |
| 24 // all other fingerprints. | |
| 25 extern const char kTamperDetectFingerprint[]; | |
| 26 extern const char kTamperDetectFingerprintChromeProxy[]; | |
| 27 | |
| 28 // Fingerprint |kTamperDetectFingerprint| contains multiple | |
| 29 // fingerprints, each starts with a tag followed by "=" and its fingerprint | |
| 30 // value. Three fingerprints and their respective tags are defined below. | |
| 31 extern const char kTamperDetectFingerprintVia[]; | |
|
bengr
2014/07/07 17:01:35
Do these really need to be visible to the entire n
xingx
2014/07/08 00:22:25
Done.
| |
| 32 extern const char kTamperDetectFingerprintOther[]; | |
| 33 extern const char kTamperDetectFingerprintContengLength[]; | |
| 34 | |
| 35 // Utility function, exposed for unittest. | |
| 36 // Check whether values of a header field |values| contains the Chrome-Proxy | |
| 37 // header's fingerprint (starts with |kTamperDetectFingerprintChromeProxy|). | |
| 38 // If there is, return true, and save Chrome-Proxy header's fingerprint to | |
|
bengr
2014/07/07 17:01:33
If there is --> If it does
xingx
2014/07/08 00:22:26
Done.
| |
| 39 // |chrome_proxy_fingerprint|; | |
| 40 // also save other fingerprints (starts with |kTamperDetectFingerprintOther|) | |
| 41 // to |other_fingerprints|. | |
| 42 // Return false if there is no Chrome-Proxy header's fingerprint found. | |
|
bengr
2014/07/07 17:01:34
header's -> header
xingx
2014/07/08 00:22:26
Done.
| |
| 43 bool ContainsTamperDetectFingerprints(std::vector<std::string>& values, | |
|
bengr
2014/07/07 17:01:33
Make this a private or protected static member and
| |
| 44 std::string& chrome_proxy_fingerprint, | |
|
bengr
2014/07/07 17:01:34
Do not use non-const references.
xingx
2014/07/08 00:22:27
Will discuss with you.
| |
| 45 std::string& other_fingerprints); | |
| 46 | |
| 47 // The main function for detecting tamper. It takes two parameters as input, | |
|
bengr
2014/07/07 17:01:33
tamper -> tampering.
xingx
2014/07/08 00:22:26
Done.
| |
| 48 // 1. a pointer to HttpResponseHeaders, | |
| 49 // 2. a boolean variable indicates whether the connection | |
|
bengr
2014/07/07 17:01:34
variable indicates -> variable that indicates
xingx
2014/07/08 00:22:27
Done.
| |
| 50 // between Chrome and data reduction proxy is on HTTPS or not. | |
| 51 // For such response, the function checks whether there is a tamper detect | |
|
bengr
2014/07/07 17:01:34
What is "such response"? Be clearer
xingx
2014/07/08 00:22:26
Done.
| |
| 52 // request (contains fingerprints) from data reduction proxy, if so, it checks | |
| 53 // whether there are tampers and report the results to UMA. | |
| 54 void CheckResponseFingerprint(const net::HttpResponseHeaders*, const bool); | |
| 55 | |
| 56 //extern enum FingerprintCode; | |
| 57 enum FingerprintCode { CHROMEPROXY, VIA, OTHERHEADERS, | |
|
bengr
2014/07/07 17:01:33
Put each value on a separate line.
xingx
2014/07/08 00:22:26
Done.
| |
| 58 CONTENTLENGTH, NONEXIST }; | |
| 59 | |
| 60 // The class for detecting tamper. | |
|
bengr
2014/07/07 17:01:34
tampering.
xingx
2014/07/08 00:22:26
Done.
| |
| 61 // It wraps up the functionalities for tamper detection. | |
|
bengr
2014/07/07 17:01:35
Remove this line. It doesn't add anything. Try to
xingx
2014/07/08 00:22:25
Done.
| |
| 62 // For each fingerprint, we need to implement two functions: | |
| 63 // * checking function: returns tamper or not for such fingerprint; | |
| 64 // (function name starts with Check...) | |
| 65 // * reporting function: reporting results to corresponding UMA | |
| 66 // when there are tampers detected. | |
| 67 // (function name starts with Report...) | |
| 68 class DataReductionProxyTamperDetect { | |
| 69 public: | |
| 70 DataReductionProxyTamperDetect(const net::HttpResponseHeaders*, const bool, | |
|
bengr
2014/07/07 17:01:33
provide variable names.
xingx
2014/07/08 00:22:26
Done.
| |
| 71 const unsigned, std::vector<std::string>*); | |
|
bengr
2014/07/07 17:01:34
Don't make the bool and the unsigned const. I don'
xingx
2014/07/08 00:22:26
Done.
| |
| 72 virtual ~DataReductionProxyTamperDetect(); | |
| 73 | |
| 74 // Returns true if Chrome-Proxy has been tampered. | |
|
bengr
2014/07/07 17:01:33
what is the parameter?
bengr
2014/07/07 17:01:34
if Chrome-Proxy --> if the Chrome-Proxy header
xingx
2014/07/08 00:22:25
Done.
xingx
2014/07/08 00:22:25
Done.
xingx
2014/07/08 00:22:26
Done.
xingx
2014/07/08 00:22:26
Done.
| |
| 75 bool CheckHeaderChromeProxy(const std::string&) const; | |
|
bengr
2014/07/07 17:01:35
variable name
bengr
2014/07/07 17:01:35
Rename as IsChromeProxyHeaderModified(const std::s
xingx
2014/07/08 00:22:26
Done.
xingx
2014/07/08 00:22:27
Done.
| |
| 76 | |
| 77 // Returns true if Via has been tampered. | |
|
bengr
2014/07/07 17:01:34
if Via --> if the Via header
xingx
2014/07/08 00:22:26
Done.
| |
| 78 bool CheckHeaderVia(const std::string&) const; | |
|
bengr
2014/07/07 17:01:34
rename as IsViaHeaderModified(const std::string& h
bengr
2014/07/07 17:01:35
variable name
xingx
2014/07/08 00:22:25
Done.
xingx
2014/07/08 00:22:26
Done.
xingx
2014/07/08 00:22:26
Done.
| |
| 79 // Report UMA for tampering of Via header. | |
| 80 void ReportHeaderVia() const; | |
|
bengr
2014/07/07 17:01:34
suggest ReportViaHeaderTamperedUMA()
xingx
2014/07/08 00:22:26
Done.
| |
| 81 | |
| 82 // Returns true if other headers (a list of headers) hav been tampered. | |
| 83 bool CheckHeaderOtherHeaders(const std::string&) const; | |
|
bengr
2014/07/07 17:01:34
What is the parameter? The concatenation of all ot
xingx
2014/07/08 00:22:26
Done.
| |
| 84 // Report UMA for tampering of values of the list of headers. | |
| 85 void ReportHeaderOtherHeaders() const; | |
|
bengr
2014/07/07 17:01:35
ReportOtherHeadersTamperedUMA()
xingx
2014/07/08 00:22:26
Done.
| |
| 86 | |
| 87 // Returns true if Content-Length has been tampered. | |
| 88 bool CheckHeaderContentLength(const std::string&) const; | |
| 89 // Report UMA for tampering of Content-Length. | |
| 90 void ReportHeaderContentLength() const; | |
|
bengr
2014/07/07 17:01:34
ReportContentLengthHeaderTamperedUMA()
xingx
2014/07/08 00:22:25
Done.
| |
| 91 | |
| 92 // Return string of sorted values of |values|. | |
| 93 static std::string ValuesToSortedString(std::vector<std::string> &values); | |
|
bengr
2014/07/07 17:01:33
Why does this (and many of these functions) need t
xingx
2014/07/08 00:22:25
Done.
| |
| 94 | |
| 95 // Return MD5 hash value for a given string |input|. | |
|
bengr
2014/07/07 17:01:34
Return --> Returns
Add to the comment why you can
xingx
2014/07/08 00:22:26
Done.
| |
| 96 static std::string GetMD5(const std::string& input); | |
| 97 | |
| 98 // Return all the values of a header field |header_name| of the | |
| 99 // response header |headers|, as a vector. | |
| 100 static std::vector<std::string> GetHeaderValues( | |
| 101 const net::HttpResponseHeaders* headers, const std::string& header_name); | |
| 102 | |
| 103 // Return fingerprint code (enum) for the given fingerprint tag. | |
| 104 FingerprintCode GetFingerprintCode(const std::string&); | |
|
bengr
2014/07/07 17:01:33
provide a variable name here and everywhere.
xingx
2014/07/08 00:22:26
Done.
| |
| 105 | |
| 106 private: | |
| 107 // Response header. | |
| 108 const net::HttpResponseHeaders* response_headers; | |
| 109 | |
| 110 // HTTPS or HTTP. | |
| 111 const bool is_secure_scheme; | |
| 112 | |
| 113 // Carrier ID. | |
| 114 const unsigned mcc_mnc; | |
| 115 | |
| 116 // Values for Chrome-Proxy header, with |kTamperDetectFingerprintChromeProxy| | |
| 117 // removed. Save it as temporary result so we don't need to parse | |
| 118 // Chrome-Proxy header 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_ | |
| OLD | NEW |