@@ -51,6 +51,13 @@ pub fn process_referer(referer: Option<&str>) -> Referrer {
5151 match referer. map ( poem:: http:: Uri :: from_str) {
5252 // valid referer are stripped to the FQDN
5353 Some ( Ok ( referer_uri) ) => {
54+ // ignore localhost / IP addresses
55+ if referer_uri. host ( ) . map_or ( false , |host| {
56+ host == "localhost" || host. ends_with ( ".localhost" ) || host. parse :: < std:: net:: IpAddr > ( ) . is_ok ( )
57+ } ) {
58+ return Referrer :: Unknown ( None ) ;
59+ }
60+
5461 let referer_fqn = referer_uri. host ( ) . unwrap_or_default ( ) ;
5562 if is_spammer ( referer_fqn) {
5663 return Referrer :: Spammer ;
@@ -83,6 +90,12 @@ mod test {
8390 "Should return an error for a referer identified as a spammer"
8491 ) ;
8592
93+ assert_eq ! ( process_referer( Some ( "google.com" ) ) , Referrer :: Fqdn ( "google.com" . to_string( ) ) ) ;
94+ assert_eq ! ( process_referer( Some ( "127.0.0.1" ) ) , Referrer :: Unknown ( None ) ) ;
95+ assert_eq ! ( process_referer( Some ( "1.1.1.1" ) ) , Referrer :: Unknown ( None ) ) ;
96+ assert_eq ! ( process_referer( Some ( "localhost" ) ) , Referrer :: Unknown ( None ) ) ;
97+ assert_eq ! ( process_referer( Some ( "asdf.localhost" ) ) , Referrer :: Unknown ( None ) ) ;
98+
8699 assert_eq ! (
87100 process_referer( Some ( "invalid referrer" ) ) ,
88101 Referrer :: Unknown ( Some ( "invalid referrer" . to_string( ) ) ) ,
0 commit comments