make sensitive header check include port
- adjusts to use &mut Headers - add integration test
This commit is contained in:
		| @@ -364,7 +364,7 @@ impl RequestBuilder { | ||||
|                     } | ||||
|                 }; | ||||
|  | ||||
|                 headers = remove_sensitive_headers(headers, &url, &urls); | ||||
|                 remove_sensitive_headers(&mut headers, &url, &urls); | ||||
|                 debug!("redirecting to {:?} '{}'", method, url); | ||||
|             } else { | ||||
|                 return Ok(::response::new(res, client.auto_ungzip.load(Ordering::Relaxed))) | ||||
|   | ||||
| @@ -1,9 +1,8 @@ | ||||
| use std::fmt; | ||||
|  | ||||
| use ::Url; | ||||
| use hyper::header::{Headers, Authorization, Cookie}; | ||||
|  | ||||
| #[allow(unused_imports)] | ||||
| use hyper::header::{Headers, Authorization, Cookie, Accept}; | ||||
| use ::Url; | ||||
|  | ||||
| /// A type that controls the policy on how to handle the following of redirects. | ||||
| /// | ||||
| @@ -182,14 +181,17 @@ pub fn check_redirect(policy: &RedirectPolicy, next: &Url, previous: &[Url]) -> | ||||
|     }).inner | ||||
| } | ||||
|  | ||||
| pub fn remove_sensitive_headers(mut headers: Headers, next: &Url, previous: &[Url]) -> Headers { | ||||
|     let cross_host = next.host().unwrap() != previous.last().unwrap().host().unwrap(); | ||||
|     if cross_host { | ||||
|         headers.remove::<Authorization<String>>(); | ||||
|         headers.remove::<Cookie>(); | ||||
|         headers.remove_raw("www-authenticate"); | ||||
| pub fn remove_sensitive_headers(headers: &mut Headers, next: &Url, previous: &[Url]) { | ||||
|     if let Some(previous) = previous.last() { | ||||
|         let cross_host = next.host_str() != previous.host_str() | ||||
|             || next.port_or_known_default() != previous.port_or_known_default(); | ||||
|         if cross_host { | ||||
|             headers.remove::<Authorization<String>>(); | ||||
|             headers.remove::<Cookie>(); | ||||
|             headers.remove_raw("cookie2"); | ||||
|             headers.remove_raw("www-authenticate"); | ||||
|         } | ||||
|     } | ||||
|     headers | ||||
| } | ||||
|  | ||||
| /* | ||||
| @@ -245,6 +247,8 @@ fn test_redirect_policy_custom() { | ||||
|  | ||||
| #[test] | ||||
| fn test_remove_sensitive_headers() { | ||||
|     use hyper::header::Accept; | ||||
|  | ||||
|     let mut headers = Headers::new(); | ||||
|     headers.set(Accept::star()); | ||||
|     headers.set(Authorization("let me in".to_owned())); | ||||
| @@ -256,13 +260,15 @@ fn test_remove_sensitive_headers() { | ||||
|  | ||||
|     let next  = Url::parse("http://initial-domain.com/path").unwrap(); | ||||
|     let mut prev = vec![Url::parse("http://initial-domain.com/new_path").unwrap()]; | ||||
|      | ||||
|     assert_eq!(remove_sensitive_headers(headers.clone(), &next, &prev), headers); | ||||
|     let mut filtered_headers = headers.clone(); | ||||
|  | ||||
|     remove_sensitive_headers(&mut headers, &next, &prev); | ||||
|     assert_eq!(headers, filtered_headers); | ||||
|  | ||||
|     prev.push(Url::parse("http://new-domain.com/path").unwrap()); | ||||
|     let mut filtered_headers = headers.clone(); | ||||
|     filtered_headers.remove::<Authorization<String>>(); | ||||
|     filtered_headers.remove::<Cookie>(); | ||||
|  | ||||
|     assert_eq!(remove_sensitive_headers(headers.clone(), &next, &prev), filtered_headers); | ||||
| } | ||||
|     remove_sensitive_headers(&mut headers, &next, &prev); | ||||
|     assert_eq!(headers, filtered_headers); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user