Chromium Code Reviews| Index: components/data_reduction_proxy/browser/data_reduction_proxy_tamper_detect.h |
| diff --git a/components/data_reduction_proxy/browser/data_reduction_proxy_tamper_detect.h b/components/data_reduction_proxy/browser/data_reduction_proxy_tamper_detect.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..099e656f9c0f17bca71b7a943620c3701f1fc9d7 |
| --- /dev/null |
| +++ b/components/data_reduction_proxy/browser/data_reduction_proxy_tamper_detect.h |
| @@ -0,0 +1,126 @@ |
| +// Copyright 2014 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. |
| + |
| +#ifndef COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_TAMPER_DETECT_H_ |
| +#define COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_TAMPER_DETECT_H_ |
| + |
| +#include <map> |
| + |
| +#include "components/data_reduction_proxy/common/data_reduction_proxy_headers.h" |
| + |
| +#include "net/http/http_response_headers.h" |
| + |
| +//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.
|
| +//class HttpResponseHeaders; |
| +//} |
| + |
| +namespace data_reduction_proxy { |
| + |
| +// 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.
|
| +// One starts with |kTamperDetectFingerprintChromeProxy|, which is the |
| +// fingerprint for Chrome-Proxy header. |
|
bengr
2014/07/07 17:01:33
for the
xingx
2014/07/08 00:22:26
Done.
|
| +// The other one starts with |kTamperDetectFingerprint|, which includes |
| +// all other fingerprints. |
| +extern const char kTamperDetectFingerprint[]; |
| +extern const char kTamperDetectFingerprintChromeProxy[]; |
| + |
| +// Fingerprint |kTamperDetectFingerprint| contains multiple |
| +// fingerprints, each starts with a tag followed by "=" and its fingerprint |
| +// value. Three fingerprints and their respective tags are defined below. |
| +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.
|
| +extern const char kTamperDetectFingerprintOther[]; |
| +extern const char kTamperDetectFingerprintContengLength[]; |
| + |
| +// Utility function, exposed for unittest. |
| +// Check whether values of a header field |values| contains the Chrome-Proxy |
| +// header's fingerprint (starts with |kTamperDetectFingerprintChromeProxy|). |
| +// 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.
|
| +// |chrome_proxy_fingerprint|; |
| +// also save other fingerprints (starts with |kTamperDetectFingerprintOther|) |
| +// to |other_fingerprints|. |
| +// 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.
|
| +bool ContainsTamperDetectFingerprints(std::vector<std::string>& values, |
|
bengr
2014/07/07 17:01:33
Make this a private or protected static member and
|
| + 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.
|
| + std::string& other_fingerprints); |
| + |
| +// 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.
|
| +// 1. a pointer to HttpResponseHeaders, |
| +// 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.
|
| +// between Chrome and data reduction proxy is on HTTPS or not. |
| +// 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.
|
| +// request (contains fingerprints) from data reduction proxy, if so, it checks |
| +// whether there are tampers and report the results to UMA. |
| +void CheckResponseFingerprint(const net::HttpResponseHeaders*, const bool); |
| + |
| +//extern enum FingerprintCode; |
| +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.
|
| + CONTENTLENGTH, NONEXIST }; |
| + |
| +// The class for detecting tamper. |
|
bengr
2014/07/07 17:01:34
tampering.
xingx
2014/07/08 00:22:26
Done.
|
| +// 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.
|
| +// For each fingerprint, we need to implement two functions: |
| +// * checking function: returns tamper or not for such fingerprint; |
| +// (function name starts with Check...) |
| +// * reporting function: reporting results to corresponding UMA |
| +// when there are tampers detected. |
| +// (function name starts with Report...) |
| +class DataReductionProxyTamperDetect { |
| + public: |
| + DataReductionProxyTamperDetect(const net::HttpResponseHeaders*, const bool, |
|
bengr
2014/07/07 17:01:33
provide variable names.
xingx
2014/07/08 00:22:26
Done.
|
| + 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.
|
| + virtual ~DataReductionProxyTamperDetect(); |
| + |
| + // 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.
|
| + 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.
|
| + |
| + // 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.
|
| + 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.
|
| + // Report UMA for tampering of Via header. |
| + void ReportHeaderVia() const; |
|
bengr
2014/07/07 17:01:34
suggest ReportViaHeaderTamperedUMA()
xingx
2014/07/08 00:22:26
Done.
|
| + |
| + // Returns true if other headers (a list of headers) hav been tampered. |
| + 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.
|
| + // Report UMA for tampering of values of the list of headers. |
| + void ReportHeaderOtherHeaders() const; |
|
bengr
2014/07/07 17:01:35
ReportOtherHeadersTamperedUMA()
xingx
2014/07/08 00:22:26
Done.
|
| + |
| + // Returns true if Content-Length has been tampered. |
| + bool CheckHeaderContentLength(const std::string&) const; |
| + // Report UMA for tampering of Content-Length. |
| + void ReportHeaderContentLength() const; |
|
bengr
2014/07/07 17:01:34
ReportContentLengthHeaderTamperedUMA()
xingx
2014/07/08 00:22:25
Done.
|
| + |
| + // Return string of sorted values of |values|. |
| + 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.
|
| + |
| + // 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.
|
| + static std::string GetMD5(const std::string& input); |
| + |
| + // Return all the values of a header field |header_name| of the |
| + // response header |headers|, as a vector. |
| + static std::vector<std::string> GetHeaderValues( |
| + const net::HttpResponseHeaders* headers, const std::string& header_name); |
| + |
| + // Return fingerprint code (enum) for the given fingerprint tag. |
| + 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.
|
| + |
| + private: |
| + // Response header. |
| + const net::HttpResponseHeaders* response_headers; |
| + |
| + // HTTPS or HTTP. |
| + const bool is_secure_scheme; |
| + |
| + // Carrier ID. |
| + const unsigned mcc_mnc; |
| + |
| + // Values for Chrome-Proxy header, with |kTamperDetectFingerprintChromeProxy| |
| + // removed. Save it as temporary result so we don't need to parse |
| + // Chrome-Proxy header twice. |
| + std::vector<std::string>* clean_chrome_proxy_header_values; |
| + |
| + // Map a fingerprint tag (string) to a fingerprint code (enum). |
| + std::map<std::string, FingerprintCode> fingperprint_tag_code_map; |
| +}; |
| + |
| +} // namespace data_reduction_proxy |
| +#endif // COMPONENTS_DATA_REDUCTION_PROXY_BROWSER_DATA_REDUCTION_PROXY_TAMPER_DETECT_H_ |