@@ -799,6 +799,63 @@ public async Task AllOptionsDisabledRequestDoesntChange()
799799 Assert . Equal ( "http" , context . Request . Scheme ) ;
800800 }
801801
802+ [ Theory ]
803+ [ InlineData ( ForwardedHeaders . XForwardedFor , false ) ]
804+ [ InlineData ( ForwardedHeaders . XForwardedFor , true ) ]
805+ [ InlineData ( ForwardedHeaders . XForwardedHost , false ) ]
806+ [ InlineData ( ForwardedHeaders . XForwardedHost , true ) ]
807+ [ InlineData ( ForwardedHeaders . XForwardedProto , false ) ]
808+ [ InlineData ( ForwardedHeaders . XForwardedProto , true ) ]
809+ public async Task IgnoreXForwardedHeadersFromUnknownProxy ( ForwardedHeaders forwardedHeaders , bool unknownProxy )
810+ {
811+ var builder = new WebHostBuilder ( )
812+ . Configure ( app =>
813+ {
814+ var options = new ForwardedHeadersOptions
815+ {
816+ ForwardedHeaders = forwardedHeaders
817+ } ;
818+ if ( ! unknownProxy )
819+ {
820+ var proxy = IPAddress . Parse ( "10.0.0.1" ) ;
821+ options . KnownProxies . Add ( proxy ) ;
822+ }
823+ app . UseForwardedHeaders ( options ) ;
824+ } ) ;
825+ var server = new TestServer ( builder ) ;
826+
827+ var context = await server . SendAsync ( c =>
828+ {
829+ c . Request . Headers [ "X-Forwarded-For" ] = "11.111.111.11" ;
830+ c . Request . Headers [ "X-Forwarded-Host" ] = "testhost" ;
831+ c . Request . Headers [ "X-Forwarded-Proto" ] = "Protocol" ;
832+ c . Connection . RemoteIpAddress = IPAddress . Parse ( "10.0.0.1" ) ;
833+ c . Connection . RemotePort = 99 ;
834+ } ) ;
835+
836+ if ( unknownProxy )
837+ {
838+ Assert . Equal ( "10.0.0.1" , context . Connection . RemoteIpAddress . ToString ( ) ) ;
839+ Assert . Equal ( "localhost" , context . Request . Host . ToString ( ) ) ;
840+ Assert . Equal ( "http" , context . Request . Scheme ) ;
841+ }
842+ else
843+ {
844+ if ( forwardedHeaders . HasFlag ( ForwardedHeaders . XForwardedFor ) )
845+ {
846+ Assert . Equal ( "11.111.111.11" , context . Connection . RemoteIpAddress . ToString ( ) ) ;
847+ }
848+ if ( forwardedHeaders . HasFlag ( ForwardedHeaders . XForwardedHost ) )
849+ {
850+ Assert . Equal ( "testhost" , context . Request . Host . ToString ( ) ) ;
851+ }
852+ if ( forwardedHeaders . HasFlag ( ForwardedHeaders . XForwardedProto ) )
853+ {
854+ Assert . Equal ( "Protocol" , context . Request . Scheme ) ;
855+ }
856+ }
857+ }
858+
802859 [ Fact ]
803860 public async Task PartiallyEnabledForwardsPartiallyChangesRequest ( )
804861 {
0 commit comments